« FOMAくん | トップページ | VOCALOID2が近々発売 »

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

« FOMAくん | トップページ | VOCALOID2が近々発売 »

数学」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/120337/7585973

この記事へのトラックバック一覧です: 物体の移動先にある一点を通過したか判定するには内積が便利:

« FOMAくん | トップページ | VOCALOID2が近々発売 »

このブログについて

  • S_Ishimaru is ...

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


    シン石丸について

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

AMAZON 本ベストセラー

GoogleAnalytics

Google BLOG内検索

無料ブログはココログ

AMAZON エレクトロニクス

AMAZON ゲームベストセラー

2018年9月
            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