도구스학업·수학

두 선분의 교차 판정 계산기

선분 두 개의 끝점을 넣으면 외적(CCW) 네 번으로 교차 여부와 교점을 냅니다. 한 점에서 스치는 경우와 일직선으로 겹치는 경우까지 갈라서 답하며, 좌표를 정수로 바꿔 계산해 부동소수점 오차에 흔들리지 않습니다.

선분 AB

선분 CD

두 선분은

가로지릅니다

C와 D가 직선 AB를 사이에 두고 갈라져 있고, A와 B도 직선 CD를 사이에 두고 갈라져 있습니다. 외적 네 개의 부호가 두 쌍 모두 엇갈리므로 두 선분이 속에서 가로지릅니다.

판정가로지릅니다
교점 x2
교점 y2

외적 네 개

무엇어느 쪽
d₁ = cross(C, D, A)-16오른쪽
d₂ = cross(C, D, B)16왼쪽
d₃ = cross(A, B, C)16왼쪽
d₄ = cross(A, B, D)-16오른쪽
방향 벡터의 외적-32엇갈림

cross(P, Q, R) = (Q−P) × (R−P)입니다. 양수면 R이 P→Q의 왼쪽, 음수면 오른쪽, 0이면 한 직선 위입니다. d₁·d₂가 음수이고 d₃·d₄도 음수면 두 선분이 속에서 가로지릅니다.

0이 나오는 자리가 이 판정의 전부입니다. 부호의 곱만 보는 판정은 끝점이 상대 선분에 닿은 경우를 놓칩니다 — 0을 곱하면 0이라 「음수」가 아니기 때문입니다. 또 네 값이 모두 0이면 한 직선 위인데, 그때 교집합은 점 하나가 아니라 구간일 수 있어 「교점」을 하나만 내놓으면 거짓말이 됩니다. 「구간으로 겹침」 예제를 눌러 보십시오.
좌표에 소수가 섞이면 10의 거듭제곱을 곱해 정수로 바꾼 뒤 계산합니다. 외적의 부호가 뒤집히면 답이 통째로 뒤집히는데, 0.1 + 0.2 ≠ 0.3인 세계에서 「0인가」를 묻는 것은 위험하기 때문입니다. 교점도 나눗셈 대신 기약분수로 냅니다.

계산 방법

  1. 1선분 AB의 두 끝점 좌표를 넣습니다.
  2. 2선분 CD의 두 끝점 좌표를 넣습니다.
  3. 3그림에서 실선이 AB, 점선이 CD입니다. 교점은 동그라미로 표시됩니다.
  4. 4외적 네 개의 부호를 봅니다. 0인 값이 있으면 어느 점이 상대 직선 위에 있다는 뜻입니다.
  5. 5「구간으로 겹침」 예제를 눌러 교집합이 점이 아닌 경우를 확인합니다.

자주 묻는 질문

외적의 부호 네 개를 보면 됩니다. C와 D가 직선 AB를 사이에 두고 갈라져 있고 A와 B도 직선 CD를 사이에 두고 갈라져 있으면 두 선분은 반드시 가로지릅니다. 어느 쪽에 있는지는 cross(P, Q, R) = (Q−P) × (R−P)의 부호로 알 수 있습니다 — 양수면 왼쪽, 음수면 오른쪽입니다.

외적 하나가 0이 되므로 따로 다뤄야 합니다. 부호의 곱이 음수인지만 보는 판정은 0을 곱하면 0이라 이 경우를 놓칩니다. 이 계산기는 외적이 0인 자리마다 그 점이 실제로 상대 선분의 구간 안에 있는지 확인해 「스침」으로 답합니다.

교점이 하나가 아니라 구간입니다. 외적 네 개가 모두 0이면 네 점이 한 직선 위에 있고, 그때 두 선분의 교집합은 선분이 됩니다. 「교점」을 하나만 내놓는 판정은 여기서 틀립니다. 이 계산기는 겹치는 구간의 양 끝을 함께 냅니다.

아닙니다. 네 점이 한 직선 위에 있어도 두 선분이 차지하는 구간이 떨어져 있으면 만나지 않습니다. (0,0)-(2,0)과 (4,0)-(6,0)이 그런 경우입니다. 「한 직선 위」와 「만난다」는 다른 말이므로 겹침 구간을 실제로 구해 봐야 합니다.

다릅니다. 평행은 두 방향 벡터의 외적이 0인 경우로, 아무리 늘여도 만나지 않습니다. 반면 방향이 엇갈리는데도 만나지 않는 경우가 있는데, 두 직선은 어디선가 만나지만 그 자리가 선분 밖인 것입니다. 이 계산기는 둘을 갈라서 알려 줍니다.

정확합니다. 좌표에 10의 거듭제곱을 곱해 정수로 바꾼 뒤 계산합니다. 외적의 부호가 뒤집히면 답이 통째로 뒤집히는데 0.1 + 0.2 ≠ 0.3인 부동소수점 세계에서 「0인가」를 묻는 것은 위험하기 때문입니다. 교점도 나눗셈 대신 기약분수로 냅니다. 소수점 아래 세 자리까지 다룹니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 검증은 격자점 위 선분 6,000벌을 매개변수 방정식으로 푼 독립 구현과 대조해 했습니다. A + t(B−A) = C + u(D−C)의 t, u가 둘 다 0과 1 사이인지를 나눗셈 없이 유리수 비교로 보는 방식으로, 외적 부호를 보는 방식과 유도가 달라 서로를 검산합니다.
  • AB와 CD를 바꾸거나 각 선분의 끝점 순서를 뒤집어도 판정과 교점이 같은지도 무작위 입력으로 확인했습니다.
  • 좌표는 10의 거듭제곱을 곱해 정수로 바꿔 계산합니다. 교점의 분자가 좌표 × 외적 꼴이라 배정밀도의 정확한 정수 범위를 넘을 수 있어, 약분하기 전까지는 BigInt로 들고 있습니다.
  • 한 점에서 스치는 경우, 구간으로 겹치는 경우, 한 직선 위지만 떨어진 경우, 평행한 경우, 직선으로는 만나지만 선분 밖인 경우를 모두 갈라서 답합니다.
  • 좌표는 ±10,000 안에서, 소수점 아래 세 자리까지 다룹니다. 끝점이 같은 「선분」은 받지 않습니다 — 점은 선분이 아니라 판정 규약이 달라집니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.