四角形、および四角形へのベクトル方向を持つ点が与えられます。その長方形の外側で問題の点に最も近い点を見つけるにはどうすればよいですか?
四角形、および四角形へのベクトル方向を持つ点が与えられます。その長方形の外側で問題の点に最も近い点を見つけるにはどうすればよいですか?
回答:
使用できるテクニックの1つは「レイキャスティング」と呼ばれます。これは一般にグラフィックスのレンダリングに使用されますが、見通し内(望んでいるとおり)やパス検索などの他のアプリケーションがあります。一般的には、光線とオブジェクトの交点を見つけることによって機能します。あなたの例では、光線はキャラクターの方向のベクトルです。
レイ/オブジェクトの交差(および偶然に他のオブジェクト/オブジェクトの交差)に関する有用なリファレンスは、www.realtimerendering.com / intersections.htmlです(ray / aabbおよびray / obbのリファレンスを参照してください)。
長方形には4つの辺があります。各辺は線分です。
光線との交差について、4つの側面のそれぞれをテストします。最も近いヒットを追跡します。
次に、セグメントのどこで光線が当たるかを調べるコードをいくつか示します。
bool intersect(const ray& ray, const segment& segment,point& hit) {
// where do we intersect this line?
float t = ((ray.direction.x * ray.origin.y + ray.direction.y *
(segment[0].x - ray.origin.x)) -
(ray.direction.x * segment[1].y)) /
(ray.direction.y * (segment[0].x + segment[1].x) -
ray.direction.x * (segment[0].y + segment[1].y));
if(t >= 0.0 && t<=1.0) { // in the segment
hit = segment[0] + (segment[1]-segment[0]*t); // lerp
return true;
}
return false; // no hit
}
さて、これを解決するために、線形代数(より具体的には、解析幾何学)を使用することができます。長方形をどのようにモデル化したかによります。
これが一般的なケースです:http : //paulbourke.net/geometry/lineline2d/