映射 3D 空间中两个三角形之间的点

Agn*_*kas 3 math geometry computational-geometry

编辑

我不知道它是否重要,但目标三角形角度可能与源三角形角度不同。这个事实是否使转换非仿射?(我不知道)

替代文字

我在 3D 空间中有两个三角形。鉴于我知道第一个三角形中点的 (x,y,z) 并且我知道向量 V1,V2,V3。我需要找到点 (x',y',z')。我应该用向量 V1,V2,V3 指向 (x,y,z) 进行什么变换才能得到第二个三角形中的变换点?

感谢帮助 !!!

and*_*and 5

简短的回答是,这比最初看起来更复杂,并且您对问题施加的约束的性质需要一些比您想象的更先进的技术。

所以,作为一个解释,我将稍微改变你的符号。考虑 3 对向量(它们对应于问题中两个三角形的顶点):

u = <u 0 , u 1 , u 2 , 1>
 u' = <u 0 ', u 1 ', u 2 ', 1>

v = <v 0 , v 1 , v 2 , 1>
 v' = <v 0 ', v 1 ', v 2 ', 1>

w = <w 0 , w 1 , w 2 , 1>
 w' = <w 0 ', w 1 ', w 2 ', 1>

通常,您的问题将通过识别以下形式的线性变换来解决:

    |a 0,0   a 0,1   a 0,2   a 0,3 |
A = |a 1,0   a 1,1   a 1,2   a 1,3 |
    |a 2,0   a 2,1   a 2,2   a 2,3 |
    |0      0      0      1    |

使得:

A u = u'
 A v = v'
 A w = w'

这个公式是必要的,因为变换似乎是一个 3-D 仿射变换,而不是一个 3-D 线性变换。如果是线性变换,则任何包含原点的三角形都必须映射到另一个包含原点的三角形。扩展到 4-D 空间允许使用 4-D 线性变换来执行 3-D 仿射变换。

也就是说,首先要注意的是这个问题是欠约束的(9 个方程有 12 个未知数);没有唯一的解决方案。其实有无穷多个。然而,你的问题比这更受限制,所以有一些希望。给定一个向量,你有额外的约束

p = <p 0 , p 1 , p 2 , 1>

A p = p' = <p 0 ', p 1 ', p 2 ', 1>

这样(使用您的定义向量abc

| u - p | | 你' - p' |
------- = ---------
| -一个| | U” -一个一个|

| v - p | | v' - p' |
------- = ---------
| v - b | | v' - A b |

| w - p | | w' - p' |
------- = ---------
| w - c | | w' - A c |

虽然这对您的问题提出了额外的限制,但它将它从使用线性方法可以轻松解决的问题改变为需要使用凸规划来找到唯一解决方案的问题。

也就是说,这里有一些可能的方法:

  • 继续使用凸编程来解决问题。虽然比线性问题更难解决,但它们并不是那么难解决。
  • 恢复到 2D 情况,而不是 3D 情况。这可以在不求助于那些距离测量施加的非线性约束的情况下完成。
  • 选择第四个点,而不是处理三角形,而是处理四面体。这再次消除了问题的非线性。

更新: 我已经对此进行了一些思考,并且看到了一种无需使用凸编程即可生成正确仿射变换的方法。它可以通过为每个三角形生成第四个顶点来完成,称为yy'

y = u + ( v - u )×( w - u )
 y' = u' + ( v' - u' )×( w' - u' )

其中×是两个向量的 3-D 叉积(即省略每个向量中的最后一个 1;但记住在计算完 y 和 y' 后将 1 附加到它们上)。从那里,您可以应用从列向量创建矩阵 M 和 M' 的标准技术:

 M = < u , v , w , y >
  M' = < u' , v' , w' , y' >

并使用 Steve Emmerson 建议的方法(在 4-D 而不是 3-D 中):

AM = M' 
AMM -1 = M'M -1 
A = M'M -1