2011-02-12 7 views

답변

0

두 줄로 equation을 빌드하고 교차점을 찾은 다음 해당 세그먼트에 속하는지 확인하십시오.

90

정말 선이 표시되는 방법에 따라 다릅니다. 나는 당신이 그들을 파라 메트릭 형태

X (t) = U + t V

표현했다고 가정거야 x (t) = u,210 + s는 벡터 2에 (더 굵게 표시) 여기에

1 상기 X 년대, U 년대 및 V 't V 및 t ∈ [0, 1].

두 선분 모두에있는 점이 있으면이 두 점이 교차합니다. 어떤 시점 P있다 따라서 만약 그렇게

P = X 0 (t) = 에서이 있다고 U 0 + t V 0

P = X 1 (S) = U 1 + S V 1

그리고 또한, 모두 S, T ∈ [0, 1]이면 두 선이 교차합니다. 그렇지 않으면, 그들은하지 않습니다.

우리는이 등식을 결합하면, 우리는

U + t V = U +의 V

를 얻을 수

또는 등가

U 0 - U 1 = S V 1 - t V 0

U 0 = (x 43,210, Y 00)

U 1 = (X 10, Y 10)

V 0 = (X 01, Y)

우리가 매트릭스 형태로 상기 식을 재 기입하면

, 우리가 지금

| x00 - x10 | | x11 |  | x01 | 
| y00 - y10 | = | y11 | s - | y01 | t 

이 턴 등가로되어있다 = ( 11는 Y, X 11)V 1 행렬 표현으로

| x00 - x10 | | x11 x01 | | s| 
| y00 - y10 | = | y11 y01 | |-t| 

이제 두 가지 경우가 있습니다. 고려하다. 첫 번째,이 왼쪽면이 제로 벡터이면 사소한 해결책이 있습니다. 단지 s = t = 0으로 설정하고 점들이 교차합니다. 그렇지 않으면 오른편 행렬이 역전 일 때만 유일한 해법이 있습니다.우리는 그 다음 행렬의 역행렬을

 | x11 x01 | 
d = det(| y11 y01 |) = x11 y01 - x01 y11 

을하게되면 그건 경우

| x11 x01 | 
| y11 y01 | 

는 결정이 0 인 경우이 행렬이 정의되지 않았

 | y01 -x01 | 
(1/d) | -y11 x11 | 

참고로 제공되지만, true는 라인이 평행하고 따라서 교차하지 않는다는 것을 의미합니다.

| s|   | y01 -x01 | | x00 - x10 | 
|-t| = (1/d) | -y11 x11 | | y00 - y10 | 

       | (x00 - x10) y01 - (y00 - y10) x01 | 
     = (1/d) | -(x00 - x10) y11 + (y00 - y10) x11 | 

그래서이 이들 값 모두

s = (1/d) ((x00 - x10) y01 - (y00 - y10) x01) 
t = (1/d) -(-(x00 - x10) y11 + (y00 - y10) x11) 

경우 것을 의미 행렬이 가역 인 경우, 우리는이 행렬로 왼쪽 곱하여 상기 선형 시스템을 해결

[0, 1]의 범위에 있으면 두 선분이 교차하여 교차점을 계산할 수 있습니다. 그렇지 않으면 교차하지 않습니다. 또한 d가 0이면 두 선이 평행을 이루며 이는 관심의 대상이 될 수도 있고 아닐 수도 있습니다. 이것을 C로 코딩하는 것은 그렇게 나쁘지 않아야합니다. 당신은 0으로 나누지 않도록 조심해야합니다.

희망이 도움이됩니다. 누구든지 수학을 재확인 할 수 있다면 좋을 것입니다.

관련 문제