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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
moukamouka
記事: 5
登録日時: 12年前

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

#1

投稿記事 by moukamouka » 12年前

始めまして。

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

2次元において、ある角度回転した四角形で衝突判定をするために中心点間の距離を取得する必要があるのですが
例えば次のような場合  ※説明用につくったので正確ではないです、ごめんなさい
tyuusinntennkan.jpg
tyuusinntennkan.jpg (16.9 KiB) 閲覧数: 3211 回
中心点の距離を求める式として
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)で出た値でそのまま意図した数値を出す方法があるのでしょうか。
もちろん手動でやってもいいのですが、三次元でも使う予定があり、そうなるとこのような計算をかなりの回数行うので、効率がいいようには思えませんし、なにより危険な気がします。

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 12年前

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

コード:

float getVectorDist(VECTOR APos,VECTOR BPos,VECTOR L);
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

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

#3

投稿記事 by usao » 12年前

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

moukamouka
記事: 5
登録日時: 12年前

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

#4

投稿記事 by moukamouka » 12年前

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る