3D復習中その1

2010.03.02  Category:ActionScript3.0

Math

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;

RSS Reader
RSSリーダーへの登録をお願いします。
トップへ戻るボタン

著者

大庭俊介
株式会社サイバーエージェント所属の紙デザイナー上がりのFlashデベロッパー。アメーバピグ内のコンテンツ企画、実装を手掛けています。金沢美術工芸大学出身。
follow twitter

おすすめ

イニシエーション・ラブ/ 乾 くるみ

最後の2行目を見たときにマジでビビり、最初からまた読み返してしまい、ネタばれのサイトに行き着く。

フィジカルコンピューティングを「仕事」にする

初めての共著作。Kinect作品PiggFighterの項目を執筆しています。

基礎からのiOS SDK

iPhone開発ド素人の僕が現在、勉強中の本。結構丁寧に書かれてあって分かりやすい。特にWebブラウザ作成のチュートリアル部分の説明でかなり理解が深まった。