【发布时间】:2015-06-01 10:19:46
【问题描述】:
我试图找出一个点是否在 3D 多边形中。我使用了另一个我在网上找到的脚本来处理许多使用光线投射的 2D 问题。我想知道如何将其更改为适用于 3D 多边形。我不会看有很多凹面或孔或任何东西的非常奇怪的多边形。这是python中的2D实现:
def point_inside_polygon(x,y,poly):
n = len(poly)
inside =False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
if p1x == p2x or x <= xinters:
inside = not inside
p1x,p1y = p2x,p2y
return inside
任何帮助将不胜感激!谢谢你。
【问题讨论】:
-
根据您所说的 3d 多边形,问题可能在于定义 3d 多边形到底是什么,以及如何在算法上定义它。您的多边形是否在平面上,因此可以将其投影到二维平面上吗?如果不是,那么你的意思是 3d 网格(如盒子或金字塔?)如果不是,如果它是扭曲的煎饼形状或类似的形状,那么我想不出你会如何准确地定义一个点是否是“在”多边形内。
-
我希望 poly 是 (x,y,z) 点的列表。就像在上面的代码中一样,它只处理基本形状,因为假设连通性,所以任何凹面或类似的东西都可能会弄乱算法。例如,我可能有一个从球体方程或某种圆柱体、圆锥体或平行六面体方程生成的点列表。我希望这有助于澄清。
-
听起来你想知道一个点是否在 3d 网格内。 (不知道怎么做,但一定是可能的。)也许看看 qhull,它做凸包,它可能具有在 python 中公开的功能,可以让你检查一个点是否在凸包内。 (尽管这不适用于凸面。)
-
为了完整...发布的代码和相关信息可以在geospatialpython.com/2011/01/point-in-polygon.html找到
标签: python 3d polygons point-in-polygon