Algorithm 计算立方体的横截面
如下图所示,立方体的横截面可以是:Algorithm 计算立方体的横截面,algorithm,sorting,Algorithm,Sorting,如下图所示,立方体的横截面可以是: 三角 长方形 五角大楼(非德鲁) 六边形 假设我们得到一个六边形。我们可以得到交叉平面与立方体每一侧的交点,并得到六边形ABCDEF。问题是:我们如何对交点进行排序,使六边形ABCDEF可以分成4个三角形ABC,ACD,ADE和AEF 注意点的顺序是非常重要的,因为如果我把顺序弄错了,我就不能画出来。我想把它们分成三角形,因为我想在OpenGL中可视化它们 非常感谢@HugoRune的回答。这里是我想和大家分享的一些结果。左图像是三维体积的横截面(从任意
ABCDEF
。问题是:我们如何对交点进行排序,使六边形ABCDEF
可以分成4个三角形ABC
,ACD
,ADE
和AEF
注意点的顺序是非常重要的,因为如果我把顺序弄错了,我就不能画出来。我想把它们分成三角形,因为我想在OpenGL中可视化它们
非常感谢@HugoRune的回答。这里是我想和大家分享的一些结果。左图像是三维体积的横截面(从任意角度)。右侧图像是三维体积的结果。
在不丧失一般性的情况下,我假设立方体的边沿笛卡尔坐标轴对齐(如果不是这种情况,则可以调整算法以使用各自的主轴) 然后,您可以利用两个相邻点的特殊属性:它们有一个(并且只有一个)共同的坐标,例如A和B都位于立方体边界的上平面(例如,相同的z),B和C共享另一个公共平面,D和e共享相同的z,但与A和B的共同值不同。使用此信息可以帮助您对点进行排序
据我所见,所述程序应适用于所有交叉口情况。立方体边平面内始终有一条边,连接立方体边上的两个点。交点是凸多边形,因此任何适用于凸多边形的排序在此处也适用 特别是:
- 计算质心Z=(A+B+C+…)/numPoints
- 计算正常n=AB交叉点BC
- 获取从质心到第一个点的向量:ZA
- 通过ZA将所有点P按正常n排序为ZP
(符号角度==角度(ZA,ZP)*符号(n点(ZA交叉ZP))