2013-09-21 3 views
0

두 선분이 교차하는지 여부를 확인하는 방법을 찾고 싶습니다.이를 구현하기 위해 Xlib 프로그래밍을 사용하고 있습니다.두 개의 선 세그먼트 (두 개의 직선이 아닌)가 교차하는지 알아 보는 방법

인터넷에서 확인했지만 두 선의 교차점을 찾는 방법 만 찾았지만 두 선분은 찾지 못했습니다.

어떻게 이것을 X lib 프로그래밍을 사용하여 구현할 수 있습니까?

답변

1

이렇게하려면 Xlib가 필요하지 않습니다. >B1 = (x1 + dx1, y1 + dy1)

  • A2 = (x2, y2)
  • - -> B2 = (x2 + dx2, y2 + dy2) 두 개의 세그먼트가

    • A1 = (x1, y1)하자.

    세그먼트는 평행 한 더 교점이없는 경우 vp == 0

    • vp = dx1 * dy2 - dx2 * dy1

    하자.

    그렇지 않으면, v = (vx, vy)는 벡터하자 A1 사이 A2

    • vx = x2 - x1
    • vy = y2 - y1

    계산

    • k1 = (vx * dy2 - vy * dx2)/vp
    • k2 = (vx * dy1 - vy * dx1)/vp

    [0, 1] 간격 외부에 k1 또는 k2 가을, 세그먼트가 교차하지 않는 (그러나 기본 선이 교차 할) 경우. 그렇지 않으면, 교차로는 대칭에 대해 궁금해하는 경우 부수적으로,이 공식은 How do you detect where two line segments intersect?에 대답을 제외하고 기본적으로 유사하다

    (x2 + k2 * dx2, y2 + k2 * dy2)

    와 같은 포인트가 될 것이다

    (x1 + k1 * dx1, y1 + k1 * dy1)

    에있다 거기에서 오는 코딩은 초보자 나 서두른 사람 (나는 여러 번 나처럼 자주 사용하는 사람)에게는 결코 사소하지 않을 것이다.

    +0

    "vp == 0 인 경우 세그먼트가 평행하고 교차가 없습니다"또는 평행하고 같은 선의 일부입니다. 두 번째 경우에는 세그먼트가 겹치는 지 확인하기 위해 추가 테스트가 필요합니다. – chux

    관련 문제