Algorithm 三维三角形条展平算法

Algorithm 三维三角形条展平算法,algorithm,graphics,3d,geometry,computational-geometry,Algorithm,Graphics,3d,Geometry,Computational Geometry,我有一个3D的三角形条带(见图)。三角形不在一个平面上 我想把三角形条展平,这样所有三角形都位于第一个三角形的平面上 计划是围绕第二个三角形与第一个三角形的连接边旋转第二个三角形,使其与第一个三角形在平面内。然后我继续对其他三角形使用这种方法,直到它们都在平面内 我正在寻找一个快速算法来做到这一点 有没有其他方法可以展平三角带 最快的方法是 1) 计算由第一个三角形定义的平面方程 2) 将所有静止点投影到此平面上请记住,一次只移动一个点。由于每个三角形与前一个三角形共享两个点,因此只有远点需要

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

我想把三角形条展平,这样所有三角形都位于第一个三角形的平面上

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

  • 我正在寻找一个快速算法来做到这一点
  • 有没有其他方法可以展平三角带

  • 最快的方法是 1) 计算由第一个三角形定义的平面方程
    2) 将所有静止点投影到此平面上

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

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

    相反,您可以存储三角形顶点的相互位置并在平面中恢复它们

    可能的方式(我假设顶点编号是顺序的):

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

    以及该投影在该直线上的位置(作为参数t)

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

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

    谢谢你的回答。你能解释一下你将如何进行投影吗?我想OP希望旋转,而不是投影网格。如果其中一个三角形的平面与第一个三角形成90度角,则投影将生成线段,而不是三角形。投影可能会产生不想要的结果。我猜这个问题是分解你之前关于这个主题的有趣问题()的一部分。如果是这样的话,我认为这是一个合理的想法,但不会产生一条最短的路径。而且,在解决这个问题之前,你需要找到合适的条带进行展平。这也不容易。@danh谢谢你的评论。是的,最后我需要最短的路径。我看了不同的书、论文和讨论。看来这不是一项容易的任务。然而,由于我可以将我的问题从一个完整的网格简化为一个带有几个三角形(少于20个)的三角形条带,所以我认为将条带展平将是一个解决方案。还是有更好的方法?@danh你认为这不会导致最短路径?这是为什么?是的,如果你已经知道最短路径带,那么最短的2D路径与该带平坦(然后转换回原始旋转)似乎是最短测地路径的合理想法。这也需要证据,但似乎很合理。
     t = DotProduct(AC, AB) / DotProduct(AB, AB)
    
    C' = A' + t * A'B'  + Len * VectorProduct(UnitPlaneNormal, UnitA'B')