如何确定一个点是否位于 3D 空间中的多边形内部?

问题描述 投票:0回答:2

我有一个 3D 点 P(x,y,z) 和一个由任意数量的 3D 点定义的多边形 S。多边形不一定是凸的(所以在我看来,here提供的解决方案并不能回答我的问题),但是P与S在同一平面上。现在,我需要确定P是否位于S内部。

例如:

polygon = np.array([[6173.953125  , 9689.90136719,  298.03326416],
       [6173.95410156, 9689.90136719,  298.09350586],
       [6173.89355469, 9689.86621094,  298.23690796],
       [6173.89355469, 9689.86621094,  298.23690796],
       [6173.83496094, 9689.83398438,  298.5083313 ],
       [6173.89453125, 9689.86816406,  298.38320923],
       [6173.89697266, 9689.87011719,  298.44348145],
       [6173.89697266, 9689.87011719,  298.44348145],
       [6173.953125  , 9689.90136719,  298.03326416],
       [6173.89355469, 9689.86621094,  298.23690796],
       ...
       ])

point = np.array([6171.37079656, 9688.35796064,  309.00229108])

示例图像:多边形外部的点:

在这个例子中,很明显结果应该是“False”(点在外面)。

使用要点:

point2 = np.array([6173.83496094, 9689.83398438, 297.72579346])

结果应该是“True”(点在多边形中)。

示例图像:多边形内的点:

我知道,我基本上必须解决一个简单的多边形点(PiP)问题。但是有没有直接包含这样功能的包呢?或者我如何转换所有点以应用 shapely 或类似包提供的 PiP 算法?

python 3d geometry point-in-polygon
2个回答
3
投票

当保证

P is in the same plane as S
时,将多边形和点进行(虚拟)投影到任意坐标平面(不垂直于多边形平面)。例如,要投影到 OXZ(适用于第二个示例),只需忽略 Y 分量即可。

然后使用任何用于 2D 的算法 (pnpoly)


-1
投票

我有一个针对 3D pip 的仅标头解决方案 你可以在 GitHub 上找到它 https://github.com/StefanJohnsen/PointIn3DPolygon

© www.soinside.com 2019 - 2024. All rights reserved.