3D復習中その1
3Dを基本から勉強中なのですが、
アフィン変換が分からなくていきなりつまづきました。
で、アフィン変換を調べていくと、完全に忘却している三角関数の定理がたくさん出てきて、
これは、本格的に復習しようと思いました。
いきなり、つまずいたアフィン変換
以下の例は、角度rad回転させた時の座標を求めています。
※P( x0 , y0 ) は、変換前の座標
※Q( x1 , y1 )は、変換後の座標
x1 = x0*cos(rad) - y0*sin(rad)
y1 = y0*sin(rad) + x0*cos(rad)
まず、この公式が全く理解できず、ググりました。
アフィン変換を解く
上図は、点Pから点Qへ回転したときの座標を求めます。
まず点Qの座標を(x1,y1)とすると、座標Qは、以下の式で求まります。
x1=cos(a+b);
y1=sin(a+b);
加法定理より以下の式(※式1)に展開できます。
※式1
x1 =cos(a)*cos(b) - sin(a)*sin(b);
y1 = sin(a)*cos(b) + sin(b)*cos(a);
回転前の座標Qを(x0,y0)とすると、座標Pは、以下の式(※式2)で求まります。
※式2
x0 = cos(b);
y0 = sin(b);
※式2を※式1に当てはめます。
すると以下の式になり、アフィン変換の公式になります。
x1=x0*cos(a)-y0*sin(a)
y1=y0*sin(a)+x0*cos(a)
次回は、実際のスクリプトに入っていきます。
[※追記:余弦定理の説明を追加]

以下、三平方の定理を利用した、余弦定理の証明です。
CD=b*sineA;
DB=c-b*cosA;
//三平方の定理(x² + y² = z²)より
BC²=CD²+DB²
a²=(b*sineA)²+(c-b*cosA)²
a²=b²+c²-2b*c*cosA;


















