두 줄이 앞을 향하고 있거나 멀어 졌는지 어떻게 계산합니까?


10

2 개의 선분을 설명하는 4 개의 점을 감안할 때, 선 A가 선 B를 향하거나 이로부터 멀어지는 지 어떻게 계산합니까?

두 줄은 길이가 고정되어 있으며 x1 / y1에서 x2 / y2까지의 거리로 측정 할 수 있습니다.

여기에 이미지 설명을 입력하십시오


베 지어 곡선의 경우와 직선의 경우는 어떻게 다릅니 까? 다른 선을 완전히 둘러 쌀 수있는 곡선이 있습니까 (모든 방향이 "향"을 향하도록)?
bummzack

1
당신은 아마 당신의 용어를 명확히해야합니다. 지오메트리에서 "선"은 반선 또는 선분과 달리 어느 방향 으로든 무한대로 연장되므로 2 개의 선은 평행하지 않으면 항상 교차합니다. 어느쪽에 대해 물어보고 있습니까? 방향을 의미하는 화살표를 그렸습니다. 나에게 세그먼트 또는 최대 반선을 의미합니다. "towards"와 "away"의 정의는 무엇입니까?
Hackworth

베 지어 곡선은 광선 교차 테스트를 해결하는 데 필요한 동등성을 나타내 기가 더 어려울 수 있습니다. 그건 그렇고, 나는 화살표를 나타내는 단어를 "레이"로 변경합니다. 더 빠른 응답을 얻을 수 있습니다. 다른 사람이 없다면 점심 시간에 시간이 있으면 대답하겠습니다. 그렇지 않은 경우 이것은 게임에서 매우 일반적인 작업입니다. 구글 "레이 라인 세그먼트 교차 테스트". 베 지어 곡선 테스트가 비슷하다고 생각하지만 시도한 적이 없습니다.
brandon

3
질문을 둘로 나눠야합니다. 선분이있는 부분은 매우 쉽습니다. 베 지어 곡선이있는 부분은 매우 복잡하며 대략적인 수치 솔루션 만 있습니다.
sam hocevar

요청에 따라 내 질문을 2로 나눕니다. 두 번째 부분은 다음과 같습니다. gamedev.stackexchange.com/questions/21463/…
Robinicks

답변:


11

하자 AB검은 선 두 점합니다. 하자 CD귀하의 파란색 세그먼트. z교차 곱 의 좌표 부호 는 검은 색 선의 "왼쪽"인지 "오른쪽" AB^AC인지 나타 C냅니다. 마찬가지로 교차 제품 AB^CDCD검은 색 선의 "왼쪽"또는 "오른쪽"을 조종 하는지 알려줍니다 .

우리는 그것이 왼쪽인지 오른쪽인지 알고 싶지 않습니다. 우리가 원하는 것은 그것들이 같은 방향 또는 반대 방향인지 확인하는 것입니다. 그래서 우리는 두 값을 곱합니다.

따라서 다음 의사 코드가 작동해야합니다.

z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;

if (z3 < 0)
    ; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
    ; /* Pointing away */
else
    ; /* Parallel */

베 지어 곡선에 적합한 솔루션을 작성하는 데 약간의 시간이 필요합니다. 다음과 같은 상황이 있습니까?

문제?


곡선의 경우 선 세그먼트에 가장 가까운 점에서 곡선의 접선을 찾아 다른 선 세그먼트를 테스트하는 것과 같은 방식으로 사용할 수 있다고 생각합니다. 아마 열심히 약간은 : 생각보다
notlesh

@ stephelton : 베 지어 곡선에 대한 두 번째 그림을 다시 보면서 곡선을 가리키는 곡선을 가리 킵니다. 또는 교차 할 수있는 선분과 평행 한 접선을 가지고 있지만 선분을 향해 구부러지고 교차하는 곡선을 생각해보십시오.
Cascabel

트롤 페이스 +1, 좋은 수학 :). 그러나 'towards'다이어그램에는 실제로 여전히 '멀리'있습니다. 시작점을 선 위로 이동하십시오.
Jonathan Dickinson

@JonathanDickinson 감사합니다. 이미지를 업데이트하여 심문 내용이 약간 더 명확 해졌습니다!
sam hocevar

2

시작점이 녹색 원이고 끝 점이 빨간색 화살표라고 가정

시작점과 DS와 검은 색 세그먼트 사이의 거리를 계산하고 끝점 (빨간색 화살표)에 대해 DE와 동일하게 수행하십시오. DS> DE이면 세그먼트가 향하고있는 것입니다. DE> DS이면 멀리 향합니다. 둘 다 같으면 둘은 평행입니다.

당신은 세그먼트에 점까지의 거리를 계산하는 방법을 찾을 수 있습니다 여기에 , 그리고 차 베 지어 곡선 여기 . 그러나 베 지어 곡선의 모양에 따라 이상한 결과가 반환 될 수 있습니다 (곡선이 자체 교차 할 수 있음)


DS> DE는 직선에서만 작동합니다. 베 지어에게는 실패 할 수 있습니다. 또한, "towards"에 대한 그의 정의를 모른다. 화살표의 연장선이 2 개의 점으로 정의 된 선을 통과하지만 동일한 점으로 정의 된 선분이 아닌 경우에도 " 가로 "입니까?
Hackworth

나는 선이 아닌 두 개의 세그먼트에 대해 이야기하고 있으므로 "화살표의 확장"은 없습니다. 또한 여기에서 거리에 대해 이야기 할 때 화살표가 가리키는 위치는 중요하지 않습니다. 검은 선의 가장 가까운 점은 검은 선의 시작 / 끝 점이 될 수 있지만 중요하지 않습니다. 두 세그먼트는 동일 선상에있을 수 있지만이 방법은 여전히 ​​의도 한대로 작동합니다. 베 지어 곡선의 경우 곡선 모양에 따라 이상한 결과를 낼 것이라고 언급했습니다.
Ravachol
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.