python射線法判斷點與多邊形的位置關係

2021-10-06 06:33:38 字數 1994 閱讀 4689

部落格為本人的學習筆記,多多學習,一起交流。

常見的判斷點與多邊形的位置關係有面積法,角度法以及射線法

射線法的思想為:以目標點為端點引一條射線,統計射線和多邊各邊的交點數目。如果交點個數為奇數,則點在多邊形的內部,反之則在多邊形外部。

以射線法的實現為例,**如下:

#write by heheyang

defin_or_out

(point,rangelist)

:#point為點,rangelist為多邊形的定點

#排除不在範圍內的點

rlon=

rlat=

for p in rangelist:0]

)1])

maxlon=

max(rlon)

maxlat=

max(rlat)

minlon=

min(rlon)

minlat=

min(rlat)

if(point[0]

> maxlon or point[0]

< minlon or point[1]

> maxlat or point[1]

< minlat)

:return

false

#構建各邊

s_list=

for i in

range(0

,len

(rangelist)):

s_list_x =

if i!=

len(rangelist)-1

:)1]

)else:)

0])#判斷射線與各邊的交點個數以及交點是否在邊

common=

0for i in

range(0

,len

(s_list)):

if s_list[i][1

][0]

-s_list[i][0

][0]

==0:if point[0]

==s_list[i][0

][0]

: common+=

1else

: y=

((s_list[i][1

][1]

-s_list[i][0

][1]

)/(s_list[i][1

][0]

-s_list[i][0

][0]

))*(point[0]

-s_list[i][0

][0]

)+s_list[i][0

][1]

if y==point[1]

:#考慮交點在邊的情況

p=true

elif y>point[1]

and y<=

max(s_list[i][0

][1]

,s_list[i][1

][1]

):common+=

1#判斷in or out

if common%2!=

0or p:

return

true

else

:return

false

程式是射線法的簡單實現,判斷點的多邊形的內部或者外部(內部包括:多邊形的邊及定點),如果在多邊形的內部函式返回true,反之false。

舉例:

point_list=[[

0,0]

,[4,

5],[

2,3]

,[3,

6]]rangelist=[[

0,0]

,[0,

5],[

5,5]

,[5,

0]]for point in point_list:

print

(in_or_out(point,rangelist)

)

判斷點是否在多邊形中 射線判斷法

1.叉乘判別法 只適用於凸多邊形 想 象乙個凸多邊形,其每乙個邊都將整個2d螢幕劃分成為左右兩邊,連線每一邊的第乙個端點和要測試的點得到乙個向量v,將兩個2維向量擴充套件成3維的,然後將 該邊與v叉乘,判斷結果3維向量中z分量的符號是否發生變化,進而推導出點是否處於凸多邊形內外。這裡要注意的是,多邊...

判斷點在多邊形內演算法(射線法)

謝謝分享!點和多邊形關係的演算法實現 好了,現在我們已經了解了向量叉積的意義,以及判斷直線段是否有交點的演算法,現在回過頭看看文章開始部分的討論的問題 如何判斷乙個點是否在多邊形內部?根據射線法的描述,其核心是求解從p點發出的射線與多邊形的邊是否有交點。注意,這裡說的是射線,而我們前面討論的都是線段...

判斷點在多邊形內 射線法詳解

現有乙個點p x0,y0 多變形ptpolypon,判斷點p是否在多邊形內。判斷乙個點是否在多邊形內,我們可以從該點引出一條水平射線 任意射線都可,但水平便於計算 觀察射線與多變形的交點個數,如果交點個數為奇數,則該點在多邊形內,如果為偶數則在多邊形外。如圖 點在多邊形內,從該點做一條水平射線,與多...