生活随笔
收集整理的這篇文章主要介紹了
判断两条直线的位置关系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在看任意兩個多邊形的交并比。
開始自己想辦法,花了兩天時間,進展比較緩慢。情況越想越多,越來越不可控。于是只有求助與度娘了。雖然還是有些問題,但問題還是慢慢的有些好轉,其中一點心青大神的博客中提到的想法和源碼,給了我很大啟示。
求兩條直線的位置關系中, 大神是用的向量的想法,思路很新穎,但是我有點一知半解,c++轉的python代碼運行也有點問題, 于是我老老實實的在網上補習了一下直線的位置關系, 并用一般表達式做了實現。
其中線段的關系,我分為以下五種:
lines_status
= ['coll',
'para',
'ins',
'coll_on',
'ins_on']
def get_2line_status
(line1, line2
):x1,y1
= line1
[0
]x2,y2
= line1
[1
]x3,y3
= line2
[0
]x4,y4
= line2
[1
]a
= y2-y1b
= x1-x2 c
= x2*y1 -x1*y2 e
= y4-y3f
= x3-x4 g
= x4*y3 -x3*y4
if b*e
== a*f:
if c*f
== g*b and c*e
== g*a:
if (x1-x3
) == 0 or
(x1-x4
) == 0: coll_
=[[x1,y1
]] elif (x1-x3
)*
(x1-x4
) < 0: coll_
= [[x1,y1
]]if (x1-x3
)*
(x1-x2
) > 0: coll_.append
([x3,y3
])else: coll_.append
([x4,y4
])elif (x2-x3
) == 0 or
(x2-x4
) == 0: coll_
=[[x2,y2
]] elif (x2-x3
)*
(x2-x4
) < 0: coll_
= [[x2,y2
]]if (x2-x3
)*
(x2-x1
) > 0: coll_.append
([x3,y3
])else: coll_.append
([x4,y4
])else:
return ['coll']return ['coll_on', coll_
]else:
return ['para']if a
!= 0 and e
!= 0:yi
= (a*g-e*c
)/
(b*e-a*f
)elif a
== 0:yi
= -c/b
else :yi
= -g/f
if b
!= 0 and f
!= 0:xi
= (b*g-f*c
)/
(a*f-b*e
)elif b
== 0:xi
= -c/a
else :xi
= -g/e
if point_in_segment
((xi,yi
),line1
) \and point_in_segment
((xi,yi
),line2
):
return ['ins_on',
[[xi,yi
]]]else:
return ['ins',
[[xi,yi
]]]
恩恩,開源時代,希望對大家有所幫助。
總結
以上是生活随笔為你收集整理的判断两条直线的位置关系的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。