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

标签 math geometry transformation affinetransform

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

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

我知道我可以在两个三角形之间创建一个仿射变换,这将一个完全映射到另一个,但我不想要仿射变换中存在的剪切效应。我希望我的变换仅由平移、旋转和缩放组成。

知道如何做到这一点吗?

最佳答案

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

  • 比例:按面积(B)/面积(A)缩放三角形 A
  • 变换:用这样的向量变换三角形 A,使两个三角形 centroids匹配。
  • 旋转:使用优化方法选择范围内的值 [0, 360)用于满足您的个人相似性标准的轮换。

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

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

    关于math - 两个三角形之间的相似变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852065/

    相关文章:

    math - 使用简短的贝塞尔曲线列表来近似点列表

    graphics - 确定三角形所在的体素

    ios - 计算CGPoint是否在线段上?

    Matlab 将单应性应用于一组点(不是图像)

    javascript - 如何生成3个名字不重复的名字

    math - 如何检查线的任何点(或部分)是否在内部或接触矩形

    javascript - 确定两个圆相交的点和 Angular 。

    java - 我应该如何格式化 3D 引擎的几何实例化过程?

    java - 不存在类型变量 Y 的实例,因此 Calendar 符合 LiveData<Y>

    r - 将转录矩阵转换为基因矩阵的任何智能解决方案?