2013-08-14 8 views
1

이 주제를 논의하는 stackoverflow에서 많은 게시물을 보았습니다. stackoverflow에서 솔루션을 가져 왔지만 게시를 찾을 수 없습니다. 말하자면 : 두 개의 선이 교차하는 경우 크로스 제품은 왼쪽과 오른쪽에 대해 두 가지 다른 결과를 생성합니다. 하나는 긍정적이고 하나는 부정입니다. 그렇지 않으면 둘 다 동일한 부호를 갖습니다. 지금까지는 괜찮습니다. 사용 된 수식은 다음과 같습니다. 여기서 AB는 한 줄이고 다른 한 줄은 CD입니다.두 줄이 교차하는지 확인하십시오.

dotproductleft = (BX-도끼) (CY-저자) - (바이 불안) (CX-Bx로)

dotproductright = (BX-도끼) (Dy가 - 바) - (바이 불안) (DX-Bx로)

I 다음 주어진 GPS이를 계산하는 경우에는 I는 교차점이 가능하지 않은 경우에는, 교점 좌표를 얻을.

A : X : 15.4433917 Y : 47.0697272

B : X : 15.4433661 Y : 47.0697722

C : X : 15.4434363 Y : 47.0696776

D : X : 15.442966 y를 47.0700098

Google지도 엔진에 그려 보면 분명히이 선들 사이에 교차가 없음을 알 수 있습니다. dotproductleft에 대한

결과 : -7.372399999828474E-10 및 dotproductright에 대한 : 1.1921940000328E-8

그것은 매우 다른 예를 위해 노력하고 있습니다 만, 여기에 내가 그것을 잘 작동하지 않는 것을 보았다. 그러나 수식에 어떤 오류도 발견 할 수 없었습니다.

The points on Google Maps

+0

[해당 게시물을 참조하십시오] (http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect). – AakashM

+0

아니면? 그게 뭔가 다른 말을하는 것 같다 – AakashM

+0

아니 그게 내가 뭘 찾고 있었는지 참조. 그러나 야곱의 대답은 생각을 불러 일으켰습니다. –

답변

5

어느 라인 세그먼트 (예를 들어, AB와 CD()가 평행하지 않은 경우) 언제나 가로지를 포함 라인.

라인 세그먼트이 교차하는지 확인하고 싶습니다. 교차점을 찾고 두 선분 모두에 있는지 확인하면 쉽게 수행 할 수 있습니다.

예를 들어, 두 선 (AB와 CD가 놓여있는 선)은 P = (15.4434,47.0697)에 교차합니다. P은 AB에있는 경우는 이제 다음 PAPB의 내적이 부정 (각도 PB PA 사이 때문에 180 ° COS (180) = - 1) .

PA와 PB의 내적을 계산하면 양수를 얻게됩니다 (따라서 은 AB에 속하지 않습니다). 그러나 PC와 PD의 내적은 음수를 제공합니다 (따라서 CD에 있습니다).

따라서 앞의 점 제품 (교차점 포함)이 음수이면 선분이 교차하는지 확인할 수 있습니다.