2007.09.10

Flash的数学講座2

物体がP1からP2へ移動する場合。

今回はArrowMCというMovieClip(図)を移動させることを考えましょう。
ArrowMC

FlashではMovieClipの移動を多用しますが、単にX, Yのプロパティを
変更しただけでは面白くありませんよね。ナンセンスです。
nonsense.PNG

現在点P1(x1, y1)から目的点P2(x2, y2)へ移動する場合、
MovieClipを目的点へ向かって回転させたほうがカックイイ。
Kakkuii.PNG

MovieClipのプロパティ、_rotationに角度を設定すると
そのMovieClipのインスタンスはその角度だけ回転します。
allowMC._rotation = sita;
degree.PNG

ではP1とP2を結ぶこの角度θはいくらになるのでしょうか。

まずP1, P2に関する長さを求めましょう。(符号こみ)
X軸の長さは dx = x2 - x1
Y軸の長さは dy = y2 - y1
また符号のない、純粋な長さ(スカラー)はこれらの絶対値になります。
adx = Math.abs( dx );
ady = Math.abs( dy );
ですよね。数学ではこの長さから角度を求める式があるのです。

「カックイイ図」のようにP1, P2があった場合、角度θは
Math.atan( dx / dy ); であらわせます。
「あーくたんじぇんと」と読みます。


 tanθ = X
 atanX = θ

しかしこの「あーくたんじぇんと」には値域があって、
-π/2 < Tan < π/2[rad]
360度全てに対応することはできません。
そこで4つの象限にわけて考えていきましょう。
【Flash的第一象限】X軸:正 Y軸:負
area4.PNG
sita = Math.atan( adx / ady );

【Flash的第二象限】X軸:正 Y軸:正
area4.PNG
sita = Math.atan( ady / adx ) + Math.PI / 2;

【Flash的第三象限】X軸:負 Y軸:正
area4.PNG
sita = Math.atan( adx / ady ) + Math.PI;

【Flash的第四象限】X軸:負 Y軸:負
area4.PNG
sita = Math.atan( ady / adx ) + Math.PI * 3 / 2;

求めたθに対して[rad]から[degree]に戻しましょう。
arrowMC._rotation = Math.PI * sita / 180;

こうすることでarrowMCはP1からP2の方向を向くわけです。

コメント (8)

同じようなものを私も作ってみています。いろいろと
今後ご教授いただければ、幸いです。

コメントありがとうございます。
FLASH数学塾のActionScriptでの曲線を拝見しました。
私も幾何学に興味があるので非常にそそられる曲線美でした。

新井さんの放物線、すばらしいものでした。
見惚れてしまいます。
私としては、曲面を動かしてみたいのですが、何か動きのあるいい曲面はないでしょうか?

Flash数学塾のサンプルで、パラメータに固定で数値を代入していますが、onEnterFrameで変化させるとどうでしょうか。それだけできっと面白くなりますよ。
週末試しに作ってみようと思います。

寡聞にして「onEnterFrame」を知りません。週末休みなしで、是非お願いします。

4次元空間の中の曲面を追加しました。ご覧いただければ幸いです。「onEnterFfame」でパラメータを滑らかに動かすのは相変わらずできません。

 4次元空間ですか。もはや数学的にちょっとついていけなくなってしまいました。いつか数学の勉強を再開したいものです。
 曲面を1つ描くだけで結構時間がかかってしまうので、曲面を滑らかに動かす、というのは難しいですね。
 また、Flash数学塾のActionScriptのソースには他ファイルをincludeしているので、私の自宅では曲面を再現することができませんでした。見よう見まねで3次元空間を表現しようとActionScriptをいじっていましたが、難しいですね。

射影空間とその周辺、グラスマン多様体とか射影代数曲線とかを追加しました。よろしければご覧ください。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
admin