始めまして。
DXライブラリを使用しゲーム用の判定を作っているのですが、なかなか解決できないので、質問させていただきます。
2次元において、ある角度回転した四角形で衝突判定をするために中心点間の距離を取得する必要があるのですが
例えば次のような場合 ※説明用につくったので正確ではないです、ごめんなさい
中心点の距離を求める式として
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: 方向ベクトルと中心点間の距離
図の中にベクトル(-160,-40)を表しそうな白い矢印は見えないのですが、どういう意味でしょうか?moukamouka さんが書きました:この二点でベクトルの引き算をした答を(-160,-40)とする方法(図でいう白い矢印)はないのでしょうか?
関数化したらどうでしょうか?moukamouka さんが書きました:もちろん手動でやってもいいのですが、三次元でも使う予定があり、そうなるとこのような計算をかなりの回数行うので、効率がいいようには思えませんし、なにより危険な気がします。
プロトタイプ宣言は、例えばこんな感じになると思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 方向ベクトルと中心点間の距離
その方向ベクトルの値 (0.71,-0.71 ) が間違っているだけではないでしょうか.
(その図では下に行くほどYが+なのだと思うのですが,
方向ベクトルの矢印の向き的に考えて,Y成分が負の値というのは違いません?)
(その図では下に行くほどYが+なのだと思うのですが,
方向ベクトルの矢印の向き的に考えて,Y成分が負の値というのは違いません?)
-
- 記事: 5
- 登録日時: 12年前
Re: 方向ベクトルと中心点間の距離
みけCAT さんが書きました: 図の中にベクトル(-160,-40)を表しそうな白い矢印は見えないのですが、どういう意味でしょうか?
日付またいで考えたのになんで出てこなかったんだろう・・usao さんが書きました:その方向ベクトルの値 (0.71,-0.71 ) が間違っているだけではないでしょうか.
(その図では下に行くほどYが+なのだと思うのですが,
方向ベクトルの矢印の向き的に考えて,Y成分が負の値というのは違いません?)
先を見越して3D用の回転行列から軸方向の成分を抜き出していたので、2Dとはyの方向が違うということをすっかり忘れていました。
すでにある関数を使うんだから間違いないと考えるのはダメですね、2Dでもっとも基本的なところなのに・・
みけCAT さんがおっしゃったようにy座標を変換させるものを、2Dのとき用として用意したいと思います。
これで判定がうまくできそうです、ありがとうございました。