数学

2007年8月19日 (日)

物体の移動先にある一点を通過したか判定するには内積が便利

電脳空間カウボーイズの「第百四十八回 アメリカ帰りゲームを語る 前編」で、

僕が「内積が便利だなと思った」という話をしてる部分が、全然意味わからんのじゃないか。

と思って、どういうことかというサンプルをActionScript3.0で書いてみました(DotProduct.as)

 

このプログラムの肝は、throughPoint関数。

このプログラム、ボールの移動スピードを管理している変数dxは、正の値にも負の値にもなります。

で、このボールが画面の真ん中、座標200を超えたら上または下に移動させたい。

このような場合、どのように判定を書けばシンプルに書けるか?っという話ですね。

内積について、ざっくり説明すると、ベクトルaと、ベクトルbをかけると、二つの成す角cosθが求まるという公式です。

ここでポイントになるのは、このcosθが求まるという点。

cosは、90度から270度までが、負の値。

0度から90度と、270度から360度までが正の値。

という性質があります。

なんで、移動前の位置から目的地までのベクトルaと、移動後の位置から目的地までのベクトルbを求めて、これを掛けあわせます。

目的地を通過したならば、aとbのなす角は180度になるはず。

つまり掛けた結果は負の値になると。

逆に通過していないならば、aとbのなす角は0度なので、正の値となるはず。

そういう処理を行っているのが、throughPoint関数。

ということですね。


背景グラフィックはこれ。

[dotp_bg.png]


DotProduct.as

このブログについて

  • S_Ishimaru is ...

    Mac、デジカメ、音楽、楽器ガジェット、プログラミング、iPhone、ケータイなど色々興味を持ったことについて書いているブログです。


    シン石丸について

AMAZON コンピュータ・インターネット本

AMAZON 本ベストセラー

GoogleAnalytics

Google BLOG内検索

無料ブログはココログ

AMAZON エレクトロニクス

AMAZON ゲームベストセラー

2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31