如何确定一个点是否位于 3D space 的多边形内?
How to determine if a point lies inside a polygon in 3D space?
我有一个 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 算法?
保证P is in the same plane as S
时,将多边形点(虚拟)投影到任意坐标平面(不垂直于多边形平面)。例如,要投影到 OXZ(适用于第二个示例),只需忽略 Y-components。
然后使用任何适用于 2D 的算法 (pnpoly)
我有一个 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 算法?
保证P is in the same plane as S
时,将多边形点(虚拟)投影到任意坐标平面(不垂直于多边形平面)。例如,要投影到 OXZ(适用于第二个示例),只需忽略 Y-components。
然后使用任何适用于 2D 的算法 (pnpoly)