用于展平3D三角形条带的算法

时间:2016-09-30 16:49:26

标签: algorithm graphics 3d geometry computational-geometry

我有一个3D三角形条(见插图)。三角形不在一个平面上。

enter image description here

我想展平三角形条带,使所有三角形都位于第一个三角形的平面内。

计划是围绕其连接边缘旋转第二个三角形与第一个三角形,使其与第一个三角形成平面。然后我继续这个方法用于其他三角形,直到它们都在平面上。

  1. 我正在寻找一种快速算法来做到这一点。
  2. 是否有其他方法可以展平三角形条?

3 个答案:

答案 0 :(得分:1)

请记住,您一次只会移动一个点。由于每个三角形与前一个三角形共享两个点,因此只有远点需要移动,并且将围绕由其他两个点创建的轴移动,直到它位于所需的平面上。重复此过程直到完成。

答案 1 :(得分:1)

如果只是旋转每个三角形,则必须旋转所有下一个三角形以保持几何不变 - 这种方式具有二次复杂性。

除此之外,您可以存储三角形顶点的相互位置并将其恢复到平面中。

可能的方式(我认为顶点编号是连续的):

对于第N个点C=P[N]计算并存储Len - 投影到AB线的长度(A=P[N-2], B=P[N-1]

   Len = VectorLength(VectorProduct(UnitAB, AC))

enter image description here

此投影在该线的位置(作为参数t)。

 t = DotProduct(AC, AB) / DotProduct(AB, AB)

要在平面中构建C'=P'[N],请计算

C' = A' + t * A'B'  + Len * VectorProduct(UnitPlaneNormal, UnitA'B')

答案 2 :(得分:0)

这样做最快的方法是 1)计算由第一个三角形定义的平面的方程 2)将所有休息点投射到这个平面上