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