两个三角形之间的相似变换

kaz*_*pal 5 math geometry transformation affinetransform

我有两个2D三角形(即,它们都位于平面中),并且想要找到将它们中的一个最接近地映射到另一个上的相似性变换(旋转+缩放+平移).

这两个三角形实际上并不相似,所以我只想让变换尽可能地对齐它们.

我知道我可以在两个三角形之间创建一个仿射变换,它将精确地映射到另一个三角形,但我不想要仿射变换中存在的剪切效果.我希望我的变换只由翻译,旋转和缩放组成.

知道怎么做吗?

Sha*_*baz 2

定义相似性并不是一件容易的事,但这里有一些您可以尝试的想法。假设您想将三角形​​ A(几乎)转换为三角形 B

  • 缩放:按面积(B)/面积(A)缩放三角形A
  • 变换:通过向量变换三角形 A,使两个三角形质心匹配。
  • [0, 360)旋转:使用优化方法选择符合您个人相似性标准的旋转范围值。

旋转部分可能是最困难的。一个简单而有效的想法是应用爬山法,从三个点开始,取最好的。这三个点是将 A 的一个点放在 B 的每个点上所需的旋转量。

相似性标准本身也并不容易。我想到的一件事是变换后重叠表面的数量。计算这个并不容易,或者至少很麻烦。