我有一个3D三角形条(见插图)。三角形不在一个平面上。
我想展平三角形条带,使所有三角形都位于第一个三角形的平面内。
计划是围绕其连接边缘旋转第二个三角形与第一个三角形,使其与第一个三角形成平面。然后我继续这个方法用于其他三角形,直到它们都在平面上。
答案 0 :(得分:1)
请记住,您一次只会移动一个点。由于每个三角形与前一个三角形共享两个点,因此只有远点需要移动,并且将围绕由其他两个点创建的轴移动,直到它位于所需的平面上。重复此过程直到完成。
答案 1 :(得分:1)
如果只是旋转每个三角形,则必须旋转所有下一个三角形以保持几何不变 - 这种方式具有二次复杂性。
除此之外,您可以存储三角形顶点的相互位置并将其恢复到平面中。
可能的方式(我认为顶点编号是连续的):
对于第N个点C=P[N]
计算并存储Len
- 投影到AB线的长度(A=P[N-2], B=P[N-1]
)
Len = VectorLength(VectorProduct(UnitAB, AC))
此投影在该线的位置(作为参数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)将所有休息点投射到这个平面上