任意のサイズの 2 つの三角形があります。問題は、ある三角形から別の三角形に座標を転送するにはどうすればよいかということです。座標系での三角形の位置の両方を知っています。はい、両方とも1つのシステムにあります。
基本的に、三角形1にポイントがあり、三角形2に転送する必要があります。
いくつかの投稿を読んで、アフィン変換行列を使用して計算できることがわかりましたが、これをアフィン変換行列で解決する方法がわかりませんでした。
助けてくれてありがとう。
任意のサイズの 2 つの三角形があります。問題は、ある三角形から別の三角形に座標を転送するにはどうすればよいかということです。座標系での三角形の位置の両方を知っています。はい、両方とも1つのシステムにあります。
基本的に、三角形1にポイントがあり、三角形2に転送する必要があります。
いくつかの投稿を読んで、アフィン変換行列を使用して計算できることがわかりましたが、これをアフィン変換行列で解決する方法がわかりませんでした。
助けてくれてありがとう。
未知のアフィン変換行列を持ってみましょう
| a c e |
M =| b d f |
| 0 0 1 |
最初の三角形の頂点は(xa1, ya1), (xa2, ya2), (xa3, ya3)
で、2 番目の三角形の頂点の座標は(xb1, yb1), (xb2, yb2), (xb3, yb3)
です。
次に、最初の三角形の頂点を 2 番目の 1 つの頂点に変換するアフィン変換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)
行列を掛けます) 。