2

私はlwjglを使ってJavaでゲームを書いています。基本的に、下の画像のように、交差するかどうかを確認したい2つの計画があります。

ここに画像の説明を入力

飛行機ごとに4つのポイントがあります。誰か助けてください。

4

2 に答える 2

2

2 つの平面が平行である (同じ平面でない) 場合、これらの平面は交差しません。

p1p2p3および を平面p4を定義する 4 点とn=(a,b,c)し、法線ベクトルを として計算しn=cross(p2-p1, p3-p1)ます。平面方程式は

ax + by + cz + d = 0

どこd=-dot(n,p1)

あなたは2機の飛行機を持っています

ax + by + cz + d = 0
a’x + b’y + c’z + d’ = 0

それらは平行です(そして同じではありません)

a/a’ == b/b’ == c/c’ != d/d’

この述語を実装するときは、0 による除算をチェックする必要があります

于 2013-07-23T19:47:40.187 に答える
1

これで十分だとは言えませんが、次の 3 つのテストで十分だと思います。

2 つの平面の...

  1. 各平面を x 軸に投影し、重なりがあるかどうかを確認します
  2. 各平面をy軸に投影し、重なりがあるかどうかを確認します
  3. 各平面を z 軸に投影し、重なりがあるかどうかを確認します

これら 3 つのケースのいずれにも重複がない場合、平面は交差しません。それ以外の場合、平面は交差します。

軸に投影する方法やオーバーラップを計算する方法がわからない場合はお知らせください。また、これら 3 つのテストが不十分であるかどうかもお知らせください。

編集1:

アルゴリズム: 実際に投影する必要はなく、最大範囲を見つけることができます。例として x 軸を見てみましょう。平面 1 の x の最小値と平面 1 の x の最大値を見つけます。次に、平面 2 の x の最小値と平面 2 の x の最大値を見つけます。 5] が [2 , 9] と重なっている場合)、x 軸への射影と重なっています。平面セグメントのエッジが x 軸と平行でない場合、x 値の範囲を見つけるのは簡単ではないことに注意してください。軸に平行なエッジを持たない、より複雑な平面セグメントを扱っている場合、私は実際には役に立ちません。マトリックスのようなものを使用する必要があるかもしれません。

ちなみに、この試験は分離軸試験と呼ばれています。交差する平面セグメントをテストするには、x、y、および z 軸のテストで十分だと思います。

出典: (書籍) Game Physics Engine Development: How To Build A Robust Commercial-Grade Physics Engine For Your Game (Second Edition) by Ian Millington

編集2:

実際には、さらに多くの軸を確認する必要があります。

于 2013-07-23T16:27:01.280 に答える