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

2022-10-04 17:09:14 字數 1688 閱讀 3362

#!/usr/bin/python3.4

# -*- coding:utf-8 -*-

def ispointinpolygon(point, rangelist): #[[0,0],[1,1],[0,1],[0,0]] [1,0.8]

# 判斷是否在外包矩形內,如果不在,直接返回false

lnglist =

latlist =

for i in range(len(range

lnglist.append(rangelist[i][0])

latlist.append(rangelist[i程式設計客棧][1])

print(lnglist, latlist)

maxlng = max(lnglist)

minlng = min(lnglist)

maxlat = max(latlist)

lfzpbz minlat = min(latlist)

print(maxlng, minlng, maxlat, minlat)

if (point[0] > maxlng or point[0] < minllfzpbzng or

point[1] > maxlat or point[1] < minlat):

return false

count = 0

point1 = rangelist[0]

for i in range(1, len(rangelist)):

point2 = rangelist[i]

# 點與多邊形頂點重合

if (point[0] == point1[0] and point[1] == point1[1]) or (point[0] == point2[0] and point[1] == point2[1]):

print("在頂點上")

return false

# 判斷線段兩端點是否在射線兩側 不在肯定不相交 射線(-∞,lat)(lng,lat)

if (point1[1] < point[1] and point2[1] >= point[1]) or (point1[1] >= point[1] and point2[1] < point[1]):

# 求線段與射線交點 再和lat比較

point12lng = point2[0] - (point2[1] - point[1]) * (point2[0] - point1[0])/(point2[1] - point1[1])

print程式設計客棧(point12lng)

# 點在多邊形邊上

if (point12lng == point[0]):

print("點在多邊形邊上")

return false

if (point12lng < point[0]):

count +=1

point1 = point2

print(count)

if count%2 == 0:

return false

else:

return true

if __name__ == '__main__':

print(ispointinpolygon([0.8,0.8], [[0,0],[1,1],[0,1],[0,0]]))

本文標題: python3射線法判斷點是否在多邊形內

本文位址:

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

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

交點(射線)法判斷點是否在麵內,C

交點法 從被判斷點向右水平發出一條涉嫌,根據射線與面邊界的交點數量判斷點是否在麵內 交點數為奇數,點在麵內 交點數為偶數,點在麵外。程式思路,1,首先點是否高於或低於整個面區域,如果是則在麵外 2,切點不記錄在內 3,記錄交點個數 如下 main.cpp templatet min const t ...

用射線法實現判斷點是否在多邊形內部

最近工作中遇到了這個問題,檢索之後發現這種實現方式挺有意思的,無論是凸多邊形還是凹多邊形都可以判斷。射線法是用被測點向任意方向 通常為了好算,使其射向右側 做一條射線,判斷射線與多邊形的交點。如果交點的數量為奇數,則被測點在多邊形內 如果交點的數量為偶數,則被測點在多邊形以外。期間,有些特殊情況需要...