スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
以後の更新内容の改善のために、是非ともご評価のほどよろしくお願いします!→

ある点が、線分を境にどちらに存在するか

2Dアクション開発記録 第3弾は、外積を使ったテクニックを紹介します。


今回は、「ある点が、線分を境にどちらに存在するか」を判定する関数を作りました。


ちなみに、参考にしたサイトは下のサイトです。
○×つくろーどっとコム: 内積と外積の使い方:【外積の概念とその利用を学びました】

恥ずかしながら、私はゆとり教育世代なので、高校数学Bのベクトルでは外積を習いませんでした。なので、上のサイトで調べてから自校の物理の先生に質問しに行って、なんとなく理解しました。


今回の関数は、外積の(成分のほうの)公式を使っているだけなので難しくありませんが、
数学のY座標と、ウィンドウのY座標が正反対なので、ほんの少し手こずりました。


(外積を使った)線分と円のテスト(C言語(C++?))



内積を使った当たり判定と同様に、DXライブラリというものを使うので、描画自体は簡単です。

PositionLC関数が判定関数で、中心点が線分の上ならTRUE、下ならFALSEが返されます。 (PositionLCの「LC」は、Line&Circleという意味です^^;)
ちなみに、コンパイル等は、Microsoft Visual C++ 2008 ExpressEdition を使用。



超簡単に説明します。(この文は、ZIP内のReadme.txtに記述されています。)

線分ベクトルの成分と、線分の始点から円の中心までのベクトル成分を元にした
外積計算の結果から判定します。線分ベクトル成分を(Ax,Ay)、円中心へのベクトル成分
を(Bx,By)としたら、外積は「Ax×By?Bx×Ay」ですが、数学上のY軸とウィンドウのY軸は、
方向が正反対なので、計算式を「Bx×Ay?Ax×By」としてやりました。
その外積の値が正の数なら、線分より上に点が存在し、逆に負の数なら、線分より下に
点が存在することになります。

わかりづらい説明ですがお許しを(汗)

ある点が、線分を境にどちらに存在するかの判定

【お試しダウンロード】(約530KB)



これを使えば、キャラクターが線上に上手く乗ってくれる処理が実現できるようです。

数学って便利ですね・・・


(追記:プログラム中に致命的なミスを含めていたことがわかりましたので訂正させていただきます。申し訳ありません...(2009.10.13)) (追記:プログラム中にBOOL型を使用していましたが、これはC++での対応となり、標準のC言語では対応しておりませんでした。不備が重なり申し訳ありません。(2009.10.14))
以後の更新内容の改善のために、是非ともご評価のほどよろしくお願いします!→

テーマ : C言語 /  ジャンル : コンピュータ

コメントの投稿

非公開コメント

カテゴリー
ようこそ!
Author: Torasuke
Profile: 地元大学の情報系学部に息をひそめる二回生。
   SA SW


ブログ内検索
最近のコメント
オススメ
京都の大学生のラボブログ
Python,Java,Objective-C,GAE,Macなど
Python独習中の大学生のブログ


ltzz.info
ここの管理者さんには謁見済み!(えっ

 Use OpenOffice.org
無補償でも良いなら、MSOfficeよりOpenOfficeで十分です。

Mozilla Firefox ブラウザ無料ダウンロード
当サイトは、Firefoxというブラウザで動作確認しています。私は以前、IE派でしたが、一度乗り換えて慣れてしまうと、Firefoxのほうが便利だということを実感しました。

是非よろしくお願いします。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。