私はlwjglを使ってJavaでゲームを書いています。基本的に、下の画像のように、交差するかどうかを確認したい2つの計画があります。
飛行機ごとに4つのポイントがあります。誰か助けてください。
2 つの平面が平行である (同じ平面でない) 場合、これらの平面は交差しません。
p1
、p2
、p3
および を平面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 による除算をチェックする必要があります
これで十分だとは言えませんが、次の 3 つのテストで十分だと思います。
2 つの平面の...
これら 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:
実際には、さらに多くの軸を確認する必要があります。