物体がP1からP2へ移動する場合。
今回はArrowMCというMovieClip(図)を移動させることを考えましょう。
FlashではMovieClipの移動を多用しますが、単にX, Yのプロパティを
変更しただけでは面白くありませんよね。ナンセンスです。
現在点P1(x1, y1)から目的点P2(x2, y2)へ移動する場合、
MovieClipを目的点へ向かって回転させたほうがカックイイ。
MovieClipのプロパティ、_rotationに角度を設定すると
そのMovieClipのインスタンスはその角度だけ回転します。
allowMC._rotation = sita;
では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軸:負
sita = Math.atan( adx / ady );
【Flash的第二象限】X軸:正 Y軸:正
sita = Math.atan( ady / adx ) + Math.PI / 2;
【Flash的第三象限】X軸:負 Y軸:正
sita = Math.atan( adx / ady ) + Math.PI;
【Flash的第四象限】X軸:負 Y軸:負
sita = Math.atan( ady / adx ) + Math.PI * 3 / 2;
求めたθに対して[rad]から[degree]に戻しましょう。
arrowMC._rotation = Math.PI * sita / 180;
こうすることでarrowMCはP1からP2の方向を向くわけです。
コメント (8)
同じようなものを私も作ってみています。いろいろと
今後ご教授いただければ、幸いです。
投稿者: 山野和一 | 2007年10月 9日 21:54
コメントありがとうございます。
FLASH数学塾のActionScriptでの曲線を拝見しました。
私も幾何学に興味があるので非常にそそられる曲線美でした。
投稿者: 新井秀和 | 2007年10月10日 16:50
新井さんの放物線、すばらしいものでした。
見惚れてしまいます。
私としては、曲面を動かしてみたいのですが、何か動きのあるいい曲面はないでしょうか?
投稿者: 山野和一 | 2007年10月11日 19:39
Flash数学塾のサンプルで、パラメータに固定で数値を代入していますが、onEnterFrameで変化させるとどうでしょうか。それだけできっと面白くなりますよ。
週末試しに作ってみようと思います。
投稿者: 新井秀和 | 2007年10月12日 10:12
寡聞にして「onEnterFrame」を知りません。週末休みなしで、是非お願いします。
投稿者: 山野和一 | 2007年10月12日 19:03
4次元空間の中の曲面を追加しました。ご覧いただければ幸いです。「onEnterFfame」でパラメータを滑らかに動かすのは相変わらずできません。
投稿者: 山野和一 | 2007年12月29日 11:10
4次元空間ですか。もはや数学的にちょっとついていけなくなってしまいました。いつか数学の勉強を再開したいものです。
曲面を1つ描くだけで結構時間がかかってしまうので、曲面を滑らかに動かす、というのは難しいですね。
また、Flash数学塾のActionScriptのソースには他ファイルをincludeしているので、私の自宅では曲面を再現することができませんでした。見よう見まねで3次元空間を表現しようとActionScriptをいじっていましたが、難しいですね。
投稿者: 新井秀和 | 2008年1月 7日 10:34
射影空間とその周辺、グラスマン多様体とか射影代数曲線とかを追加しました。よろしければご覧ください。
投稿者: KyamWeb | 2008年8月14日 18:36