ページ 11

方向ベクトルと中心点間の距離

Posted: 2013年8月28日(水) 16:29
by moukamouka
始めまして。

DXライブラリを使用しゲーム用の判定を作っているのですが、なかなか解決できないので、質問させていただきます。

2次元において、ある角度回転した四角形で衝突判定をするために中心点間の距離を取得する必要があるのですが
例えば次のような場合  ※説明用につくったので正確ではないです、ごめんなさい
tyuusinntennkan.jpg
tyuusinntennkan.jpg (16.9 KiB) 閲覧数: 3215 回
中心点の距離を求める式として
fabs(VDot( VSub(A.Pos, B.Pos), L)) Lは方向ベクトル Posは座標用
このような式を
http://marupeke296.com/COL_3D_No13_OBBvsOBB.html (FLOAT Interval = の部分ですね)
こちらを参考にして作りました。
四角形の-45度回転したX軸における距離、という感じでしょうか。

しかし実際に動かしてみると-45度(0.71,-0.71)のとき、距離は約142と、期待した数値は出ませんでした。
そこでVSub(A.Pos, B.Pos)で出た値をもとに計算してみたところその通りで(-160*0.71)+(40*-0.71)= -142となります。
ここでふと気になったんですが、この二点でベクトルの引き算をした答を(-160,-40)とする方法(図でいう白い矢印)はないのでしょうか?
また、VSub(A.Pos, B.Pos)で出た値でそのまま意図した数値を出す方法があるのでしょうか。
もちろん手動でやってもいいのですが、三次元でも使う予定があり、そうなるとこのような計算をかなりの回数行うので、効率がいいようには思えませんし、なにより危険な気がします。

詳しい方居られましたら、教えていただきたいです。

Re: 方向ベクトルと中心点間の距離

Posted: 2013年8月28日(水) 16:38
by みけCAT
moukamouka さんが書きました:この二点でベクトルの引き算をした答を(-160,-40)とする方法(図でいう白い矢印)はないのでしょうか?
図の中にベクトル(-160,-40)を表しそうな白い矢印は見えないのですが、どういう意味でしょうか?
moukamouka さんが書きました:もちろん手動でやってもいいのですが、三次元でも使う予定があり、そうなるとこのような計算をかなりの回数行うので、効率がいいようには思えませんし、なにより危険な気がします。
関数化したらどうでしょうか?
プロトタイプ宣言は、例えばこんな感じになると思います。

コード:

float getVectorDist(VECTOR APos,VECTOR BPos,VECTOR L);

Re: 方向ベクトルと中心点間の距離

Posted: 2013年8月28日(水) 17:30
by usao
その方向ベクトルの値 (0.71,-0.71 ) が間違っているだけではないでしょうか.
(その図では下に行くほどYが+なのだと思うのですが,
 方向ベクトルの矢印の向き的に考えて,Y成分が負の値というのは違いません?)

Re: 方向ベクトルと中心点間の距離

Posted: 2013年8月28日(水) 18:41
by moukamouka
みけCAT さんが書きました: 図の中にベクトル(-160,-40)を表しそうな白い矢印は見えないのですが、どういう意味でしょうか?
usao さんが書きました:その方向ベクトルの値 (0.71,-0.71 ) が間違っているだけではないでしょうか.
(その図では下に行くほどYが+なのだと思うのですが,
 方向ベクトルの矢印の向き的に考えて,Y成分が負の値というのは違いません?)
日付またいで考えたのになんで出てこなかったんだろう・・
先を見越して3D用の回転行列から軸方向の成分を抜き出していたので、2Dとはyの方向が違うということをすっかり忘れていました。
すでにある関数を使うんだから間違いないと考えるのはダメですね、2Dでもっとも基本的なところなのに・・

みけCAT さんがおっしゃったようにy座標を変換させるものを、2Dのとき用として用意したいと思います。
これで判定がうまくできそうです、ありがとうございました。