Transfer coordinates from one triangle to another

2020-02-11 06:31发布

问题:

I have two triangles , which can be in any sizes. The problem is that, how I can transfer coordinates from one triangle to another? I know both of triangle position in coordinate system and yes, they both are in one system.

Basically, i have point in triangle1 and I need to transfer it in triangle2.

Reading some posts, I found out that I could be calculated using affine transformation matrix, but I didn't undestand how to solve this with affine transformation matrix.

Thank you for any help.

回答1:

Let's you have unknown affine transformation matrix

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

first triangle vertices are (xa1, ya1), (xa2, ya2), (xa3, ya3), and second triangle vertices have coordinates (xb1, yb1), (xb2, yb2), (xb3, yb3)

Then affine transformation that transforms first triangle to second one is

M * A = B

where

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

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

To find unknown M, we can multiply both sides of the expression by inverse of A matrix

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

Inversion of A is rather simple (calculated by Maple, may contain errors due to my typos):

| (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)  |

where determinant value is

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

So you can find affine matrix for needed transformation and apply it to coordinates