以下の問題を解決しようとしています。私はアフィン変換についてあまり知識がありません。誰かがこの質問に答えるのを手伝ってくれませんか:
正方形を平行四辺形に変換する同次座標 (つまり、すべての点[x,y]
が列ベクトル として表される)の 2D アフィン変換を表す 3x3 行列を見つけます。[x, y, 1]
[0,0],[1,0],[1,1],[0,1]
[0,1],[1,1],[2,2],[1,2]
以下の問題を解決しようとしています。私はアフィン変換についてあまり知識がありません。誰かがこの質問に答えるのを手伝ってくれませんか:
正方形を平行四辺形に変換する同次座標 (つまり、すべての点[x,y]
が列ベクトル として表される)の 2D アフィン変換を表す 3x3 行列を見つけます。[x, y, 1]
[0,0],[1,0],[1,1],[0,1]
[0,1],[1,1],[2,2],[1,2]
この質問について私が見つけたこと1)同次座標
を理解する必要が
あります 2) 行と列の主な違いを知る必要があります -ここを読んでください
3) 基本的なアフィン変換 - 回転、スケーリング/せん断、および変換を知る必要がありますそしてそれらを行列で表現する方法 -このページを読んでください
興味深いことに、答えには変換とせん断 (回転なし) のみが必要だと思います。
ソース ポイントとデスト ポイントを見ると、すべてのデスト ポイントが y 方向に +1 変換され、X 方向に 1 ずれているように見えます (平行四辺形を得るには、おそらくそれを描いて意味を理解するのが最善です)。
したがって、次の 3 * 3単位行列から始めます。
1 0 0
0 1 0
0 0 1
せん断は
1 1 0
0 1 0
0 0 1 になります
翻訳は
1 0 0
0 1 1
0 0 1になります
したがって、すべてをまとめると、
1 1 0
0 1 1
0 0 1
私は通常列メジャーを使用しないので、おそらく再確認する価値があります!
それが役立つことを願っています
もちろん、この件に関するウィキペディアのページは読んでいるはずです。
昔々、私は前任者のバージョンの1つでフォーリーとヴァンダムを読みました(これは1983年または1984年でした)、質問で説明されているように、拡張された行列とベクトルを使用して2Dおよび3D座標を操作する手法について説明しました. しかし、それから十分な時間が経過したため、すべての詳細を忘れてしまいました (そして、本を持っていません。引っ越しが多すぎます)。Newman と Sproul の本もありました。覚えているようです。
A = [ a b c ] B = [ 0 1 1 0 ] C = [ 0 1 2 1 ]
[ d e f ] [ 0 0 1 1 ] [ 1 1 2 2 ]
[ g h 1 ] [ 1 1 1 1 ] [ 1 1 1 1 ]
B の列は正方形の角を表します。C の列は平行四辺形の角を表します。行列方程式 A x B = C を解く必要があります。IIRC、行列 A の右下隅に 1 があります。値 c、f、g、および h にも事前定義された値がある可能性があります (それらはおそらくゼロです)。ゼロ以外の値は、線形 (アフィン) 変換、スケーリング、せん断、および入力形状の回転を適用します。
教科書で同様の情報を探す必要があります。または、Wikiページで-私はそれをよく見ていませんでした(上記の情報は古代の記憶に基づいています)。
4 つのポイントが 2D アフィン変換を制約していることを指摘したかっただけです。Jonathan Leffler のコメントでは、非正方行列を反転する必要があるという事実からこれを見ることができます。したがって、3 つの点を選択するか、最小二乗法を設定します。過度に制約された最小二乗解は、次の行列で解くことができます
A = [ a b c ] B = [ 0 1 1 0 ] C = [ 0 1 2 1 ]
[ d e f ] [ 0 0 1 1 ] [ 1 1 2 2 ]
[ g h 1 ] [ 1 1 1 1 ] [ 1 1 1 1 ]
正規方程式を使用して解くと、
A B = C
(A B)^T = B^T A^T = C^T
B B^T A^T = B C^T
A^T = (B B^T)^-1 B C^T
その転置を元に戻すと、
A = ((B B^T)^-1 B C^T)^T