有什么办法可以找到箱形三角形相交部分或其面积吗?
Is there any way to found box triangle intersection section or its area?
我正在尝试开发一种算法,不仅可以找出相交的事实,还可以找出它的截面或面积。我发现至少有 6 种不同的情况可能会发生,我想还有更多。这就是为什么我正在寻找通用算法,既不尝试单独解决每种情况。我正在使用 3D 盒子。
请注意,只有以下几点值得考虑:
- 长方体与三角形的交点;
- 盒子内部三角形的顶点;
- 三角形内方框的顶点。
(有著名的算法可以找到这些点)
这些点是多边形的顶点,即所需的相交部分,但我们需要按正确的顺序对这些点进行排序。您可以使用 Graham 算法来查找凸包。
这样,我们就找到了一个多边形,也就是箱三角相交的截面。
您还可以使用一种著名的算法找到它的面积。
由于三角形和长方体是凸形,可以使用Sutherland-Hodgman算法。 https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm
这相当于找到多边形 与半平面 的交点,并针对其中一个形状的每一侧重复此操作。然后通过鞋带公式求出面积
对于轴对齐的盒子,计算更简单。
最后我自己解决了。我只是将我的盒子与三角形的边相交以获得盒子或其面内的点。所以我的凸点顺序错误。为了解决问题,我使用了所有点都属于一个平面的事实,这就是为什么我可以通过恰好位于凸点内的凸点的算术平均值找到点,并使用极坐标来获取每个点的角度。剩下的只是对角度进行排序,我们将得到凸排序。
我正在尝试开发一种算法,不仅可以找出相交的事实,还可以找出它的截面或面积。我发现至少有 6 种不同的情况可能会发生,我想还有更多。这就是为什么我正在寻找通用算法,既不尝试单独解决每种情况。我正在使用 3D 盒子。
请注意,只有以下几点值得考虑:
- 长方体与三角形的交点;
- 盒子内部三角形的顶点;
- 三角形内方框的顶点。 (有著名的算法可以找到这些点) 这些点是多边形的顶点,即所需的相交部分,但我们需要按正确的顺序对这些点进行排序。您可以使用 Graham 算法来查找凸包。 这样,我们就找到了一个多边形,也就是箱三角相交的截面。 您还可以使用一种著名的算法找到它的面积。
由于三角形和长方体是凸形,可以使用Sutherland-Hodgman算法。 https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm
这相当于找到多边形 与半平面 的交点,并针对其中一个形状的每一侧重复此操作。然后通过鞋带公式求出面积
对于轴对齐的盒子,计算更简单。
最后我自己解决了。我只是将我的盒子与三角形的边相交以获得盒子或其面内的点。所以我的凸点顺序错误。为了解决问题,我使用了所有点都属于一个平面的事实,这就是为什么我可以通过恰好位于凸点内的凸点的算术平均值找到点,并使用极坐标来获取每个点的角度。剩下的只是对角度进行排序,我们将得到凸排序。