質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

249閲覧

点同士の媒介変数を使った衝突判定について

gara_kuta_ya

総合スコア54

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/11/08 08:00

点同士の媒介変数を使った衝突判定について質問があり利用させてもらいました。
媒介変数を0 < t > 1の範囲で出せばすり抜け防止になると聞いたので、
t は時間 vは移動ベクトル
(x + t* v) < (x2 + t* v2)
x + tv < x2 + tv2
t(v -v2) < x2 - x
t <( x2 - x) / (v - v2)
こんな感じでtの値を出そうとしたのですが、すり抜け範囲が変になってしまいました.
ヒント・アドバイスお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

わたしの認識では、以下のような質問と捉えました。

ある物体Pのtにおける位置はX1+tV1であり、
ある物体Qのtにおける位置はX2+t
V2であるとした場合、
PとQが衝突しているかを判定するロジックがどのようなものか
ただし、tが0<t<1の範囲の場合、同一位置であるものとする。

そうすると、
X1+tV1 = X2+tV2
が衝突している場合であり、
t= (X1-X2)/(V2-V1)
となる。
したがって、
0< (X1-X2)/(V2-V1) < 1
という条件を満たせば、PとQは衝突したと判断できる
ということになるのではないでしょうか。

投稿2018/11/08 08:36

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gara_kuta_ya

2018/11/09 00:11

アドバイスありがとうございます。 衝突判定で媒介変数を使うと衝突したかどうかと、衝突一つ前で止めるのが簡単と聞いたのでどうやるのか思考がまわってませんでした。 また考えてみます。
YOshim

2018/11/09 00:41

この方法の場合でも、vとv2、xとx2の大小関係で、等符号が逆になる場合も考える必要があります。 絶対値をとるようにしてください。
gara_kuta_ya

2018/11/09 05:50

わかりました。絶対値の要素も入れて考え直してみます。
guest

0

確認ですが、vとv2の大小関係は常に不変でしょうか。

t(v -v2) < x2 - x
t <( x2 - x) / (v - v2)

この変換は、(v-v2)>0のときは正しいですが、
(v-v2)が負の場合は、等符号が逆になります。

投稿2018/11/08 23:49

YOshim

総合スコア1085

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gara_kuta_ya

2018/11/09 00:14

返答ありがとうございます。 普遍ではないとおもいます。 座標軸で移動して衝突すり抜けしたら衝突一つ前で止めるようにしたかったのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問