Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
I
IoT_Team_Project
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Kim Siwon
IoT_Team_Project
Commits
b2e9ed5f
Commit
b2e9ed5f
authored
5 years ago
by
KWAK
Browse files
Options
Downloads
Patches
Plain Diff
KWAK
parent
d149f576
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
Server_CoAP/triangulation.py
+26
-9
26 additions, 9 deletions
Server_CoAP/triangulation.py
Server_CoAP/triangulation2.py
+247
-0
247 additions, 0 deletions
Server_CoAP/triangulation2.py
with
273 additions
and
9 deletions
Server_CoAP/triangulation.py
+
26
−
9
View file @
b2e9ed5f
...
@@ -67,7 +67,7 @@ def first_situation(a1,b1,r1,a2,b2,r2,a3,b3,r3):#첫번째 경우로 원 3개가
...
@@ -67,7 +67,7 @@ def first_situation(a1,b1,r1,a2,b2,r2,a3,b3,r3):#첫번째 경우로 원 3개가
meet1
[
1
][
1
]
=
line_position
[
1
][
2
]
/
line_position
[
1
][
1
]
meet1
[
1
][
1
]
=
line_position
[
1
][
2
]
/
line_position
[
1
][
1
]
meet2
[
1
][
1
]
=
meet1
[
0
][
1
]
meet2
[
1
][
1
]
=
meet1
[
0
][
1
]
meet1
[
1
][
0
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
1
]
-
b1
)
*
(
meet1
[
1
][
1
]
-
b1
))
+
a1
meet1
[
1
][
0
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
1
]
-
b1
)
*
(
meet1
[
1
][
1
]
-
b1
))
+
a1
meet2
[
1
][
0
]
=
a1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
1
]
-
b1
)
*
(
meet1
[
0
][
1
]
-
b1
))
meet2
[
1
][
0
]
=
a1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
1
]
-
b1
)
*
(
meet1
[
1
][
1
]
-
b1
))
if
(
cal_distance
(
meet1
[
1
][
0
],
meet1
[
1
][
1
],
a2
,
b2
)
>=
cal_distance
(
meet2
[
1
][
0
],
meet2
[
1
][
1
],
a2
,
b2
)):
if
(
cal_distance
(
meet1
[
1
][
0
],
meet1
[
1
][
1
],
a2
,
b2
)
>=
cal_distance
(
meet2
[
1
][
0
],
meet2
[
1
][
1
],
a2
,
b2
)):
meet_result
[
1
][
0
]
=
meet2
[
1
][
0
]
meet_result
[
1
][
0
]
=
meet2
[
1
][
0
]
meet_result
[
1
][
1
]
=
meet2
[
1
][
1
]
meet_result
[
1
][
1
]
=
meet2
[
1
][
1
]
...
@@ -116,7 +116,7 @@ def first_situation(a1,b1,r1,a2,b2,r2,a3,b3,r3):#첫번째 경우로 원 3개가
...
@@ -116,7 +116,7 @@ def first_situation(a1,b1,r1,a2,b2,r2,a3,b3,r3):#첫번째 경우로 원 3개가
meet1
[
2
][
0
]
=
line_position
[
2
][
2
]
/
line_position
[
2
][
0
]
meet1
[
2
][
0
]
=
line_position
[
2
][
2
]
/
line_position
[
2
][
0
]
meet2
[
2
][
0
]
=
meet1
[
2
][
0
]
meet2
[
2
][
0
]
=
meet1
[
2
][
0
]
meet1
[
2
][
1
]
=
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
0
]
-
a2
)
*
(
meet1
[
2
][
0
]
-
a2
))
+
b2
meet1
[
2
][
1
]
=
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
0
]
-
a2
)
*
(
meet1
[
2
][
0
]
-
a2
))
+
b2
meet2
[
2
][
1
]
=
b2
-
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
0
]
-
a
1
)
*
(
meet1
[
2
][
0
]
-
a2
))
meet2
[
2
][
1
]
=
b2
-
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
0
]
-
a
2
)
*
(
meet1
[
2
][
0
]
-
a2
))
if
(
cal_distance
(
meet1
[
2
][
0
],
meet1
[
2
][
1
],
a1
,
b1
)
>=
cal_distance
(
meet2
[
2
][
0
],
meet2
[
2
][
1
],
a1
,
b1
)):
if
(
cal_distance
(
meet1
[
2
][
0
],
meet1
[
2
][
1
],
a1
,
b1
)
>=
cal_distance
(
meet2
[
2
][
0
],
meet2
[
2
][
1
],
a1
,
b1
)):
meet_result
[
2
][
0
]
=
meet2
[
2
][
0
]
meet_result
[
2
][
0
]
=
meet2
[
2
][
0
]
meet_result
[
2
][
1
]
=
meet2
[
2
][
1
]
meet_result
[
2
][
1
]
=
meet2
[
2
][
1
]
...
@@ -125,8 +125,8 @@ def first_situation(a1,b1,r1,a2,b2,r2,a3,b3,r3):#첫번째 경우로 원 3개가
...
@@ -125,8 +125,8 @@ def first_situation(a1,b1,r1,a2,b2,r2,a3,b3,r3):#첫번째 경우로 원 3개가
meet_result
[
2
][
1
]
=
meet1
[
2
][
1
]
meet_result
[
2
][
1
]
=
meet1
[
2
][
1
]
else
:
else
:
a
=
1
+
(
line_position
[
2
][
0
]
/
line_position
[
2
][
1
])
*
(
line_position
[
2
][
0
]
/
line_position
[
2
][
1
])
a
=
1
+
(
line_position
[
2
][
0
]
/
line_position
[
2
][
1
])
*
(
line_position
[
2
][
0
]
/
line_position
[
2
][
1
])
b
=
(
-
2
*
a2
)
+
((
-
2
*
line_position
[
2
][
0
]
*
line_position
[
2
][
2
])
/
(
line_position
[
2
][
1
]
*
line_position
[
2
][
1
]))
+
(
2
*
line_position
[
2
][
0
]
*
b
1
/
line_position
[
2
][
1
])
b
=
(
-
2
*
a2
)
+
((
-
2
*
line_position
[
2
][
0
]
*
line_position
[
2
][
2
])
/
(
line_position
[
2
][
1
]
*
line_position
[
2
][
1
]))
+
(
2
*
line_position
[
2
][
0
]
*
b
2
/
line_position
[
2
][
1
])
c
=
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
*
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
+
(
-
2
*
line_position
[
2
][
2
]
*
b
1
/
line_position
[
2
][
1
])
+
b2
*
b2
-
r2
*
r2
+
a2
*
a2
c
=
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
*
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
+
(
-
2
*
line_position
[
2
][
2
]
*
b
2
/
line_position
[
2
][
1
])
+
b2
*
b2
-
r2
*
r2
+
a2
*
a2
meet1
[
2
][
0
]
=
(
-
b
+
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet1
[
2
][
0
]
=
(
-
b
+
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet2
[
2
][
0
]
=
(
-
b
-
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet2
[
2
][
0
]
=
(
-
b
-
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet1
[
2
][
1
]
=
(
-
1
*
line_position
[
2
][
0
]
*
meet1
[
2
][
0
]
/
line_position
[
2
][
1
])
+
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
meet1
[
2
][
1
]
=
(
-
1
*
line_position
[
2
][
0
]
*
meet1
[
2
][
0
]
/
line_position
[
2
][
1
])
+
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
...
@@ -209,9 +209,24 @@ def second_situation(a1,b1,r1,a2,b2,r2,oa3,ob3,or3):#2번째 경우로 2개의
...
@@ -209,9 +209,24 @@ def second_situation(a1,b1,r1,a2,b2,r2,oa3,ob3,or3):#2번째 경우로 2개의
# print("x:",x1,"y:",y1)
# print("x:",x1,"y:",y1)
def
function
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
):
def
function
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
):
list
=
[
r1
,
r2
,
r3
]
list
.
sort
()
a
=
cal_distance
(
a1
,
b1
,
a2
,
b2
)
a
=
cal_distance
(
a1
,
b1
,
a2
,
b2
)
b
=
cal_distance
(
a1
,
b1
,
a3
,
b3
)
b
=
cal_distance
(
a1
,
b1
,
a3
,
b3
)
c
=
cal_distance
(
a2
,
b2
,
a2
,
b2
)
c
=
cal_distance
(
a2
,
b2
,
a3
,
b3
)
if
(
list
[
2
]
==
r1
):
if
(
r2
+
a
<=
r1
or
r3
+
b
<=
r1
):
print
(
"
error
"
)
return
0
elif
(
list
[
2
]
==
r2
):
if
(
r1
+
a
<=
r2
or
r3
+
c
<=
r2
):
print
(
"
error
"
)
return
0
elif
(
list
[
2
]
==
r3
):
if
(
r1
+
b
<=
r3
or
r2
+
c
<=
r3
):
print
(
"
error
"
)
return
0
if
(
a
<=
r1
+
r2
and
b
<=
r1
+
r3
and
c
<=
r2
+
r3
):
if
(
a
<=
r1
+
r2
and
b
<=
r1
+
r3
and
c
<=
r2
+
r3
):
first_situation
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
)
first_situation
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
)
elif
(
a
<=
r1
+
r2
and
b
>
r1
+
r3
and
c
>
r2
+
r3
):
elif
(
a
<=
r1
+
r2
and
b
>
r1
+
r3
and
c
>
r2
+
r3
):
...
@@ -220,11 +235,13 @@ def function(a1,b1,r1,a2,b2,r2,a3,b3,r3):
...
@@ -220,11 +235,13 @@ def function(a1,b1,r1,a2,b2,r2,a3,b3,r3):
second_situation
(
a1
,
b1
,
r1
,
a3
,
b3
,
r3
,
a2
,
b2
,
r2
)
second_situation
(
a1
,
b1
,
r1
,
a3
,
b3
,
r3
,
a2
,
b2
,
r2
)
elif
(
a
>
r1
+
r2
and
b
>
r1
+
r3
and
c
<=
r2
+
r3
):
elif
(
a
>
r1
+
r2
and
b
>
r1
+
r3
and
c
<=
r2
+
r3
):
second_situation
(
a2
,
b2
,
r2
,
a3
,
b3
,
r3
,
a1
,
b1
,
r1
)
second_situation
(
a2
,
b2
,
r2
,
a3
,
b3
,
r3
,
a1
,
b1
,
r1
)
else
:
print
(
"
error
"
)
return
0
#예시
first_situation
(
20
,
10
,
10
,
9
,
10
,
1
,
10
,
9
,
1
)
function
(
20
,
10
,
10
,
9
,
10
,
1
,
10
,
9
,
1
)
function
(
20
,
10
,
10
,
9
,
10
,
1
,
10
,
9
,
1
)
print
(
"
-----------------------
"
)
print
(
"
-----------------------
"
)
second_situation
(
0
,
3
,
1
,
0
,
4
,
1
,
5
,
3
,
1
)
function
(
9
,
10
,
1
,
10
,
9
,
1
,
20
,
10
,
10
)
function
(
0
,
3
,
1
,
0
,
4
,
1
,
5
,
3
,
1
)
print
(
"
-----------------------
"
)
function
(
10
,
9
,
1
,
9
,
10
,
1
,
20
,
10
,
10
)
print
(
"
-----------------------
"
)
print
(
"
-----------------------
"
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Server_CoAP/triangulation2.py
0 → 100644
+
247
−
0
View file @
b2e9ed5f
import
pymongo
import
math
from
pymongo
import
MongoClient
def
cal_distance
(
a1
,
b1
,
a2
,
b2
):
return
math
.
sqrt
((
a2
-
a1
)
*
(
a2
-
a1
)
+
(
b2
-
b1
)
*
(
b2
-
b1
))
def
first_situation
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
):
#첫번째 경우로 원 3개가 서로에게 모두 겹치는 경우가 있는 경우이다
line_position
=
[[
0
,
0
,
0
],[
0
,
0
,
0
],[
0
,
0
,
0
]]
#Ax+By=c의 형태[A,B,C]
meet1
=
[[
0
,
0
],[
0
,
0
],[
0
,
0
]]
meet2
=
[[
0
,
0
],[
0
,
0
],[
0
,
0
]]
meet_result
=
[[
0
,
0
],[
0
,
0
],[
0
,
0
]]
#첫번째 직선(1,2)
line_position
[
0
][
0
]
=-
2
*
a1
+
2
*
a2
line_position
[
0
][
1
]
=-
2
*
b1
+
2
*
b2
line_position
[
0
][
2
]
=
(
r1
*
r1
-
r2
*
r2
)
+
(
a2
*
a2
-
a1
*
a1
)
+
(
b2
*
b2
-
b1
*
b1
)
#두번째 직선(1,3)
line_position
[
1
][
0
]
=-
2
*
a1
+
2
*
a3
line_position
[
1
][
1
]
=-
2
*
b1
+
2
*
b3
line_position
[
1
][
2
]
=
(
r1
*
r1
-
r3
*
r3
)
+
(
a3
*
a3
-
a1
*
a1
)
+
(
b3
*
b3
-
b1
*
b1
)
#세번째 직선(2,3)
line_position
[
2
][
0
]
=-
2
*
a2
+
2
*
a3
line_position
[
2
][
1
]
=-
2
*
b2
+
2
*
b3
line_position
[
2
][
2
]
=
(
r2
*
r2
-
r3
*
r3
)
+
(
a3
*
a3
-
a2
*
a2
)
+
(
b3
*
b3
-
b2
*
b2
)
#첫번째 직선의 교점
if
(
line_position
[
0
][
0
]
==
0
and
line_position
[
0
][
1
]
!=
0
):
meet1
[
0
][
1
]
=
line_position
[
0
][
2
]
/
line_position
[
0
][
1
]
meet2
[
0
][
1
]
=
meet1
[
0
][
1
]
meet1
[
0
][
0
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
1
]
-
b1
)
*
(
meet1
[
0
][
1
]
-
b1
))
+
a1
meet2
[
0
][
0
]
=
a1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
1
]
-
b1
)
*
(
meet1
[
0
][
1
]
-
b1
))
if
(
cal_distance
(
meet1
[
0
][
0
],
meet1
[
0
][
1
],
a3
,
b3
)
>=
cal_distance
(
meet2
[
0
][
0
],
meet2
[
0
][
1
],
a3
,
b3
)):
meet_result
[
0
][
0
]
=
meet2
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet2
[
0
][
1
]
else
:
meet_result
[
0
][
0
]
=
meet1
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet1
[
0
][
1
]
elif
(
line_position
[
0
][
0
]
!=
0
and
line_position
[
0
][
1
]
==
0
):
meet1
[
0
][
0
]
=
line_position
[
0
][
2
]
/
line_position
[
0
][
0
]
meet2
[
0
][
0
]
=
meet1
[
0
][
0
]
meet1
[
0
][
1
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
0
]
-
a1
)
*
(
meet1
[
0
][
0
]
-
a1
))
+
b1
meet2
[
0
][
1
]
=
b1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
0
]
-
a1
)
*
(
meet1
[
0
][
0
]
-
a1
))
if
(
cal_distance
(
meet1
[
0
][
0
],
meet1
[
0
][
1
],
a3
,
b3
)
>=
cal_distance
(
meet2
[
0
][
0
],
meet2
[
0
][
1
],
a3
,
b3
)):
meet_result
[
0
][
0
]
=
meet2
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet2
[
0
][
1
]
else
:
meet_result
[
0
][
0
]
=
meet1
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet1
[
0
][
1
]
else
:
a
=
1
+
(
line_position
[
0
][
0
]
/
line_position
[
0
][
1
])
*
(
line_position
[
0
][
0
]
/
line_position
[
0
][
1
])
b
=
(
-
2
*
a1
)
+
((
-
2
*
line_position
[
0
][
0
]
*
line_position
[
0
][
2
])
/
(
line_position
[
0
][
1
]
*
line_position
[
0
][
1
]))
+
(
2
*
line_position
[
0
][
0
]
*
b1
/
line_position
[
0
][
1
])
c
=
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
*
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
+
(
-
2
*
line_position
[
0
][
2
]
*
b1
/
line_position
[
0
][
1
])
+
b1
*
b1
-
r1
*
r1
+
a1
*
a1
meet1
[
0
][
0
]
=
(
-
b
+
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet2
[
0
][
0
]
=
(
-
b
-
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet1
[
0
][
1
]
=
(
-
1
*
line_position
[
0
][
0
]
*
meet1
[
0
][
0
]
/
line_position
[
0
][
1
])
+
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
meet2
[
0
][
1
]
=
(
-
1
*
line_position
[
0
][
0
]
*
meet2
[
0
][
0
]
/
line_position
[
0
][
1
])
+
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
if
(
cal_distance
(
meet1
[
0
][
0
],
meet1
[
0
][
1
],
a3
,
b3
)
>=
cal_distance
(
meet2
[
0
][
0
],
meet2
[
0
][
1
],
a3
,
b3
)):
meet_result
[
0
][
0
]
=
meet2
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet2
[
0
][
1
]
else
:
meet_result
[
0
][
0
]
=
meet1
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet1
[
0
][
1
]
print
(
"
x1:
"
,
meet_result
[
0
][
0
],
"
y1:
"
,
meet_result
[
0
][
1
])
#두번째 직선의 교점
if
(
line_position
[
1
][
0
]
==
0
and
line_position
[
1
][
1
]
!=
0
):
meet1
[
1
][
1
]
=
line_position
[
1
][
2
]
/
line_position
[
1
][
1
]
meet2
[
1
][
1
]
=
meet1
[
0
][
1
]
meet1
[
1
][
0
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
1
]
-
b1
)
*
(
meet1
[
1
][
1
]
-
b1
))
+
a1
meet2
[
1
][
0
]
=
a1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
1
]
-
b1
)
*
(
meet1
[
1
][
1
]
-
b1
))
if
(
cal_distance
(
meet1
[
1
][
0
],
meet1
[
1
][
1
],
a2
,
b2
)
>=
cal_distance
(
meet2
[
1
][
0
],
meet2
[
1
][
1
],
a2
,
b2
)):
meet_result
[
1
][
0
]
=
meet2
[
1
][
0
]
meet_result
[
1
][
1
]
=
meet2
[
1
][
1
]
else
:
meet_result
[
1
][
0
]
=
meet1
[
1
][
0
]
meet_result
[
1
][
1
]
=
meet1
[
1
][
1
]
elif
(
line_position
[
1
][
0
]
!=
0
and
line_position
[
1
][
1
]
==
0
):
meet1
[
1
][
0
]
=
line_position
[
1
][
2
]
/
line_position
[
1
][
0
]
meet2
[
1
][
0
]
=
meet1
[
1
][
0
]
meet1
[
1
][
1
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
0
]
-
a1
)
*
(
meet1
[
1
][
0
]
-
a1
))
+
b1
meet2
[
1
][
1
]
=
b1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
1
][
0
]
-
a1
)
*
(
meet1
[
1
][
0
]
-
a1
))
if
(
cal_distance
(
meet1
[
1
][
0
],
meet1
[
1
][
1
],
a2
,
b2
)
>=
cal_distance
(
meet2
[
1
][
0
],
meet2
[
1
][
1
],
a2
,
b2
)):
meet_result
[
1
][
0
]
=
meet2
[
1
][
0
]
meet_result
[
1
][
1
]
=
meet2
[
1
][
1
]
else
:
meet_result
[
1
][
0
]
=
meet1
[
1
][
0
]
meet_result
[
1
][
1
]
=
meet1
[
1
][
1
]
else
:
a
=
1
+
((
line_position
[
1
][
0
]
/
line_position
[
1
][
1
])
*
(
line_position
[
1
][
0
]
/
line_position
[
1
][
1
]))
b
=
(
-
2
*
a1
)
+
((
-
2
*
line_position
[
1
][
0
]
*
line_position
[
1
][
2
])
/
(
line_position
[
1
][
1
]
*
line_position
[
1
][
1
]))
+
((
2
*
line_position
[
1
][
0
]
*
b1
)
/
line_position
[
1
][
1
])
c
=
((
line_position
[
1
][
2
]
/
line_position
[
1
][
1
])
*
(
line_position
[
1
][
2
]
/
line_position
[
1
][
1
]))
+
((
-
2
*
line_position
[
1
][
2
]
*
b1
)
/
line_position
[
1
][
1
])
+
b1
*
b1
-
r1
*
r1
+
a1
*
a1
meet1
[
1
][
0
]
=
(
-
b
+
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet2
[
1
][
0
]
=
(
-
b
-
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet1
[
1
][
1
]
=
(
-
1
*
line_position
[
1
][
0
]
*
meet1
[
1
][
0
]
/
line_position
[
1
][
1
])
+
(
line_position
[
1
][
2
]
/
line_position
[
1
][
1
])
meet2
[
1
][
1
]
=
(
-
1
*
line_position
[
1
][
0
]
*
meet2
[
1
][
0
]
/
line_position
[
1
][
1
])
+
(
line_position
[
1
][
2
]
/
line_position
[
1
][
1
])
if
(
cal_distance
(
meet1
[
1
][
0
],
meet1
[
1
][
1
],
a2
,
b2
)
>=
cal_distance
(
meet2
[
1
][
0
],
meet2
[
1
][
1
],
a2
,
b2
)):
meet_result
[
1
][
0
]
=
meet2
[
1
][
0
]
meet_result
[
1
][
1
]
=
meet2
[
1
][
1
]
else
:
meet_result
[
1
][
0
]
=
meet1
[
1
][
0
]
meet_result
[
1
][
1
]
=
meet1
[
1
][
1
]
print
(
"
x2:
"
,
meet_result
[
1
][
0
],
"
y2:
"
,
meet_result
[
1
][
1
])
#세번째 직선의 교점
if
(
line_position
[
2
][
0
]
==
0
and
line_position
[
2
][
1
]
!=
0
):
meet1
[
2
][
1
]
=
line_position
[
2
][
2
]
/
line_position
[
2
][
1
]
meet2
[
2
][
1
]
=
meet1
[
2
][
1
]
meet1
[
2
][
0
]
=
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
1
]
-
b2
)
*
(
meet1
[
2
][
1
]
-
b2
))
+
a2
meet2
[
2
][
0
]
=
a2
-
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
1
]
-
b2
)
*
(
meet1
[
2
][
1
]
-
b2
))
if
(
cal_distance
(
meet1
[
2
][
0
],
meet1
[
2
][
1
],
a1
,
b1
)
>=
cal_distance
(
meet2
[
2
][
0
],
meet2
[
2
][
1
],
a1
,
b1
)):
meet_result
[
2
][
0
]
=
meet2
[
2
][
0
]
meet_result
[
2
][
1
]
=
meet2
[
2
][
1
]
else
:
meet_result
[
2
][
0
]
=
meet1
[
2
][
0
]
meet_result
[
2
][
1
]
=
meet1
[
2
][
1
]
elif
(
line_position
[
2
][
0
]
!=
0
and
line_position
[
2
][
1
]
==
0
):
meet1
[
2
][
0
]
=
line_position
[
2
][
2
]
/
line_position
[
2
][
0
]
meet2
[
2
][
0
]
=
meet1
[
2
][
0
]
meet1
[
2
][
1
]
=
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
0
]
-
a2
)
*
(
meet1
[
2
][
0
]
-
a2
))
+
b2
meet2
[
2
][
1
]
=
b2
-
math
.
sqrt
(
r2
*
r2
-
(
meet1
[
2
][
0
]
-
a2
)
*
(
meet1
[
2
][
0
]
-
a2
))
if
(
cal_distance
(
meet1
[
2
][
0
],
meet1
[
2
][
1
],
a1
,
b1
)
>=
cal_distance
(
meet2
[
2
][
0
],
meet2
[
2
][
1
],
a1
,
b1
)):
meet_result
[
2
][
0
]
=
meet2
[
2
][
0
]
meet_result
[
2
][
1
]
=
meet2
[
2
][
1
]
else
:
meet_result
[
2
][
0
]
=
meet1
[
2
][
0
]
meet_result
[
2
][
1
]
=
meet1
[
2
][
1
]
else
:
a
=
1
+
(
line_position
[
2
][
0
]
/
line_position
[
2
][
1
])
*
(
line_position
[
2
][
0
]
/
line_position
[
2
][
1
])
b
=
(
-
2
*
a2
)
+
((
-
2
*
line_position
[
2
][
0
]
*
line_position
[
2
][
2
])
/
(
line_position
[
2
][
1
]
*
line_position
[
2
][
1
]))
+
(
2
*
line_position
[
2
][
0
]
*
b2
/
line_position
[
2
][
1
])
c
=
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
*
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
+
(
-
2
*
line_position
[
2
][
2
]
*
b2
/
line_position
[
2
][
1
])
+
b2
*
b2
-
r2
*
r2
+
a2
*
a2
meet1
[
2
][
0
]
=
(
-
b
+
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet2
[
2
][
0
]
=
(
-
b
-
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet1
[
2
][
1
]
=
(
-
1
*
line_position
[
2
][
0
]
*
meet1
[
2
][
0
]
/
line_position
[
2
][
1
])
+
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
meet2
[
2
][
1
]
=
(
-
1
*
line_position
[
2
][
0
]
*
meet2
[
2
][
0
]
/
line_position
[
2
][
1
])
+
(
line_position
[
2
][
2
]
/
line_position
[
2
][
1
])
if
(
cal_distance
(
meet1
[
2
][
0
],
meet1
[
2
][
1
],
a1
,
b1
)
>=
cal_distance
(
meet2
[
2
][
0
],
meet2
[
2
][
1
],
a1
,
b1
)):
meet_result
[
2
][
0
]
=
meet2
[
2
][
0
]
meet_result
[
2
][
1
]
=
meet2
[
2
][
1
]
else
:
meet_result
[
2
][
0
]
=
meet1
[
2
][
0
]
meet_result
[
2
][
1
]
=
meet1
[
2
][
1
]
print
(
"
x3:
"
,
meet_result
[
2
][
0
],
"
y3:
"
,
meet_result
[
2
][
1
])
print
(
"
x:
"
,(
meet_result
[
0
][
0
]
+
meet_result
[
1
][
0
]
+
meet_result
[
2
][
0
])
/
3
,
"
/y:
"
,(
meet_result
[
0
][
1
]
+
meet_result
[
1
][
1
]
+
meet_result
[
2
][
1
])
/
3
)
return
0
def
second_situation
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
oa3
,
ob3
,
or3
):
#2번째 경우로 2개의 원만 겹치는 부분이 있는 경우이다.
line_position
=
[[
0
,
0
,
0
],[
0
,
0
,
0
],[
0
,
0
,
0
]]
#Ax+By=c의 형태[A,B,C]
meet1
=
[[
0
,
0
],[
0
,
0
],[
0
,
0
]]
meet2
=
[[
0
,
0
],[
0
,
0
],[
0
,
0
]]
meet_result
=
[[
0
,
0
],[
0
,
0
],[
0
,
0
]]
#첫번째 직선(1,2)
line_position
[
0
][
0
]
=-
2
*
a1
+
2
*
a2
line_position
[
0
][
1
]
=-
2
*
b1
+
2
*
b2
line_position
[
0
][
2
]
=
(
r1
*
r1
-
r2
*
r2
)
+
(
a2
*
a2
-
a1
*
a1
)
+
(
b2
*
b2
-
b1
*
b1
)
print
(
line_position
[
0
])
#첫번째 직선의 교점
if
(
line_position
[
0
][
0
]
==
0
and
line_position
[
0
][
1
]
!=
0
):
meet1
[
0
][
1
]
=
line_position
[
0
][
2
]
/
line_position
[
0
][
1
]
meet2
[
0
][
1
]
=
meet1
[
0
][
1
]
meet1
[
0
][
0
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
1
]
-
b1
)
*
(
meet1
[
0
][
1
]
-
b1
))
+
a1
meet2
[
0
][
0
]
=
a1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
1
]
-
b1
)
*
(
meet1
[
0
][
1
]
-
b1
))
if
(
cal_distance
(
meet1
[
0
][
0
],
meet1
[
0
][
1
],
oa3
,
ob3
)
>=
cal_distance
(
meet2
[
0
][
0
],
meet2
[
0
][
1
],
oa3
,
ob3
)):
meet_result
[
0
][
0
]
=
meet2
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet2
[
0
][
1
]
else
:
meet_result
[
0
][
0
]
=
meet1
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet1
[
0
][
1
]
elif
(
line_position
[
0
][
0
]
!=
0
and
line_position
[
0
][
1
]
==
0
):
meet1
[
0
][
0
]
=
line_position
[
0
][
2
]
/
line_position
[
0
][
0
]
meet2
[
0
][
0
]
=
meet1
[
0
][
0
]
meet1
[
0
][
1
]
=
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
0
]
-
a1
)
*
(
meet1
[
0
][
0
]
-
a1
))
+
b1
meet2
[
0
][
1
]
=
b1
-
math
.
sqrt
(
r1
*
r1
-
(
meet1
[
0
][
0
]
-
a1
)
*
(
meet1
[
0
][
0
]
-
a1
))
if
(
cal_distance
(
meet1
[
0
][
0
],
meet1
[
0
][
1
],
oa3
,
ob3
)
>=
cal_distance
(
meet2
[
0
][
0
],
meet2
[
0
][
1
],
oa3
,
ob3
)):
meet_result
[
0
][
0
]
=
meet2
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet2
[
0
][
1
]
else
:
meet_result
[
0
][
0
]
=
meet1
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet1
[
0
][
1
]
else
:
a
=
1
+
(
line_position
[
0
][
0
]
/
line_position
[
0
][
1
])
*
(
line_position
[
0
][
0
]
/
line_position
[
0
][
1
])
b
=
(
-
2
*
a1
)
+
((
-
2
*
line_position
[
0
][
0
]
*
line_position
[
0
][
2
])
/
(
line_position
[
0
][
1
]
*
line_position
[
0
][
1
]))
+
(
2
*
line_position
[
0
][
0
]
*
b1
/
line_position
[
0
][
1
])
c
=
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
*
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
+
(
-
2
*
line_position
[
0
][
2
]
*
b1
/
line_position
[
0
][
1
])
+
b1
*
b1
-
r1
*
r1
+
a1
*
a1
print
(
a
,
b
,
c
)
meet1
[
0
][
0
]
=
(
-
b
+
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet2
[
0
][
0
]
=
(
-
b
-
math
.
sqrt
(
b
*
b
-
4
*
a
*
c
))
/
(
2
*
a
)
meet1
[
0
][
1
]
=
(
-
1
*
line_position
[
0
][
0
]
*
meet1
[
0
][
0
]
/
line_position
[
0
][
1
])
+
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
meet2
[
0
][
1
]
=
(
-
1
*
line_position
[
0
][
0
]
*
meet2
[
0
][
0
]
/
line_position
[
0
][
1
])
+
(
line_position
[
0
][
2
]
/
line_position
[
0
][
1
])
print
(
meet1
[
0
][
0
],
meet1
[
0
][
1
])
print
(
meet2
[
0
][
0
],
meet2
[
0
][
1
])
print
(
cal_distance
(
meet1
[
0
][
0
],
meet1
[
0
][
1
],
oa3
,
ob3
))
print
(
cal_distance
(
meet2
[
0
][
0
],
meet2
[
0
][
1
],
oa3
,
ob3
))
if
(
cal_distance
(
meet1
[
0
][
0
],
meet1
[
0
][
1
],
oa3
,
ob3
)
>=
cal_distance
(
meet2
[
0
][
0
],
meet2
[
0
][
1
],
oa3
,
ob3
)):
meet_result
[
0
][
0
]
=
meet2
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet2
[
0
][
1
]
else
:
meet_result
[
0
][
0
]
=
meet1
[
0
][
0
]
meet_result
[
0
][
1
]
=
meet1
[
0
][
1
]
print
(
"
x:
"
,
meet_result
[
0
][
0
],
"
y:
"
,
meet_result
[
0
][
1
])
#def third_situation(a1,b1,r1,a2,b2,r2,a3,b3,r3):#3번째 경우로 겹치는 원이 없는 경우이다.(값이 정확히지는 않음)
# a=2*(a1-a2)
# b=2*(b1-b2)
# c=(r2*r2-r1*r1)+(a1*a1-a2*a2)+(b1*b1-b2*b2)
# d=2*(a2-a3)
# e=2*(b2-b3)
# f=(r3*r3-r2*r2)+(a2*a2-a3*a3)+(b2*b2-b3*b3)
# y1=(f-((d*c) / a)) / (e-((b*d)/a))
# x1=(c-b*y1)/a
# print("x:",x1,"y:",y1)
def
function
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
):
list
=
[
r1
,
r2
,
r3
]
list
.
sort
()
a
=
cal_distance
(
a1
,
b1
,
a2
,
b2
)
b
=
cal_distance
(
a1
,
b1
,
a3
,
b3
)
c
=
cal_distance
(
a2
,
b2
,
a3
,
b3
)
if
(
list
[
2
]
==
r1
):
if
(
r2
+
a
<=
r1
or
r3
+
b
<=
r1
):
print
(
"
error
"
)
return
0
elif
(
list
[
2
]
==
r2
):
if
(
r1
+
a
<=
r2
or
r3
+
c
<=
r2
):
print
(
"
error
"
)
return
0
elif
(
list
[
2
]
==
r3
):
if
(
r1
+
b
<=
r3
or
r2
+
c
<=
r3
):
print
(
"
error
"
)
return
0
if
(
a
<=
r1
+
r2
and
b
<=
r1
+
r3
and
c
<=
r2
+
r3
):
first_situation
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
)
elif
(
a
<=
r1
+
r2
and
b
>
r1
+
r3
and
c
>
r2
+
r3
):
second_situation
(
a1
,
b1
,
r1
,
a2
,
b2
,
r2
,
a3
,
b3
,
r3
)
elif
(
a
>
r1
+
r2
and
b
<=
r1
+
r3
and
c
>
r2
+
r3
):
second_situation
(
a1
,
b1
,
r1
,
a3
,
b3
,
r3
,
a2
,
b2
,
r2
)
elif
(
a
>
r1
+
r2
and
b
>
r1
+
r3
and
c
<=
r2
+
r3
):
second_situation
(
a2
,
b2
,
r2
,
a3
,
b3
,
r3
,
a1
,
b1
,
r1
)
else
:
print
(
"
error
"
)
return
0
function
(
20
,
10
,
10
,
9
,
10
,
1
,
10
,
9
,
1
)
print
(
"
-----------------------
"
)
function
(
9
,
10
,
1
,
10
,
9
,
1
,
20
,
10
,
10
)
print
(
"
-----------------------
"
)
function
(
10
,
9
,
1
,
9
,
10
,
1
,
20
,
10
,
10
)
print
(
"
-----------------------
"
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment