我有两个 2D 三角形(即它们都位于平面中),并且想找到将其中一个最接近地映射到另一个上的相似变换(旋转 + 缩放 + 平移)。
这两个三角形实际上并不相似,所以我只希望变换尽可能地对齐它们。
我知道我可以在两个三角形之间创建一个仿射变换,这将一个完全映射到另一个,但我不想要仿射变换中存在的剪切效应。我希望我的变换仅由平移、旋转和缩放组成。
知道如何做到这一点吗?
最佳答案
定义相似性不是一件容易的事,但这里有一些您可以尝试的想法。假设您想将三角形 A(几乎)转换为三角形 B
[0, 360)
用于满足您的个人相似性标准的轮换。 旋转部分可能是最困难的。一个简单而有效的想法是应用 hill climbing从三点出发,取最好的。这三个点是将 A 的一个点放在 B 的每个点上所需的旋转量。
相似性标准本身也不容易。想到的一件事是转换后重叠表面的数量。计算这并不容易,或者至少很麻烦。
关于math - 两个三角形之间的相似变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852065/