ポイントが2つの平行線の間にあるかどうかをテストするにはどうすればよいですか?


9

私が設計しているゲームでは、原点からマウスの方向に向かって爆発する爆発があります。この爆風の幅は常に同じになります。

画面の下部(現在のもの)に沿って正方形が移動します。正方形は、プレーヤーが制御する爆風の影響を受けます。

現在、私はこれらの正方形の角が爆風の2つの境界線内にあるかどうかを見つける方法を模索しています。これを行う最善の方法は、爆風が完全に水平であるかのように原点の周りに正方形の角を回転させ、角のY値が爆風の幅以下であるかどうかを確認することであると考えました彼らは影響を受ける地域内にあることを意味しますが、私は解決できません

回答:


11

1つの線分の一方の側ともう一方の線のもう一方の側の場合、点は2つの平行線の間にあります(線が同じ方向を指している場合)。

stackoverflowでこの質問の一番上の答えを使用して、ポイントがラインのどちら側にあるか(2ポイントで定義)を特定できます。


別の方法は、ポイントから中央の線までの距離を計算し、それを爆風の厚さの半分と比較することです。


2

これが私のやり方です(提供された平面が実際に平行であるかどうかをさらに確認します。平面オブジェクトには、次の形式の平面方程式が含まれています:Ax + By + Cz + D = 0、これは与えられた3から簡単に生成できます。ポイント、またはポイントと法線から(数学について不明な場合は、このページを参照してください:http : //paulbourke.net/geometry/pointlineplane/

bool isPointBetweenParallelPlanes(const vec3 point, const Plane a, const Plane b){
// test if planes are parallel
vec3 cross = a.normal CROSS b.normal;
assert((a.normal CROSS b.normal) == vec3(0,0,0) && "These planes should be parallel.");
return ((a.normal DOT point) + a.D) * ((b.normal DOT point) + b.D) < 0.0;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.