점이 두 개의 평행선 사이에 있는지 어떻게 테스트 할 수 있습니까?


10

내가 디자인하고있는 게임에는 원점에서 마우스 방향으로 폭발하는 폭발이 있습니다. 이 폭발의 너비는 항상 동일합니다.

화면 하단을 따라 (현재의) 사각형이 움직이며 플레이어가 제어하는 ​​폭발에 의해 영향을받습니다.

현재이 사각형의 모서리가 폭발의 두 경계 선 내에 있는지 확인하는 방법을 찾고 있습니다. 이 작업을 수행하는 가장 좋은 방법은 폭발이 완전히 수평 인 것처럼 원점을 중심으로 사각형의 모서리를 회전하고 모서리의 Y 값이 폭발의 너비보다 작거나 같은지 확인하는 것입니다 그들이 영향을받는 지역 내에 있음을 의미하지만, 나는 해결할 수 없습니다.


이것은 나에게 도움이되었다 : stackoverflow.com/a/3461533/1599699
Andrew

답변:


11

한 선의 한쪽과 다른 선의 다른 쪽이면 두 평행선 사이에 점이 있습니다 (선이 같은 방향을 가리 키도록).

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.