5

我有两个三角形,可以是任意大小。问题是,我如何将坐标从一个三角形转移到另一个三角形?我知道坐标系中的三角形位置,是的,它们都在一个系统中。

基本上,我在三角形 1 中有点,我需要在三角形 2 中转移它。

阅读一些帖子,我发现我可以使用仿射变换矩阵进行计算,但我不明白如何使用仿射变换矩阵来解决这个问题。

感谢您的任何帮助。

4

1 回答 1

8

让你有未知的仿射变换矩阵

   | a c e |
M =| b d f |
   | 0 0 1 |

第一个三角形顶点是(xa1, ya1), (xa2, ya2), (xa3, ya3),第二个三角形顶点有坐标(xb1, yb1), (xb2, yb2), (xb3, yb3)

那么将第一个三角形顶点转换为第二个顶点的仿射变换M是:

M * A = B

在哪里

   | xa1 xa2 xa3 |
A =| ya1 ya2 ya3 |
   |  1   1   1  |

   | xb1 xb2 xb3 |
B =| yb1 yb2 yb3 |
   |  1   1   1  |

为了找到未知的M,我们可以将表达式的两边乘以A矩阵的逆矩阵

M * A * Inv(A) = B * Inv(A)
M = B * Inv(A)

A的反转相当简单(由 Maple 计算,由于我的拼写错误可能包含错误):

| (ya2-ya3)    -(xa2-xa3)    (xa2*ya3-xa3*ya2)  |
| -(-ya3+ya1)  (-xa3+xa1)    -(xa1*ya3-ya1*xa3) | * 1/Det
| (-ya2+ya1)   -(-xa2+xa1)   (xa1*ya2-ya1*xa2)  |

其中决定值是

Det = xa2*ya3-xa3*ya2-ya1*xa2+ya1*xa3+xa1*ya2-xa1*ya3

因此,您可以找到所需变换的仿射矩阵并将其应用于坐标(乘以M(x,y,1)列矩阵)

于 2013-09-17T11:00:39.253 回答