점의 다각형 내부 판정 계산기
다각형의 꼭짓점과 점 하나를 넣으면 내부·외부·경계 위를 판정하고 광선이 어느 변과 만났는지 그림과 표로 보여 줍니다. 광선이 꼭짓점을 정확히 지날 때 두 번 세지 않는 반개구간 규약과, 자기교차 다각형에서 감기 수와 답이 갈리는 경우까지 다룹니다.
한 줄에 한 점씩 «x y» 로 넣습니다. 도는 순서대로 이어지고 마지막 점은 첫 점과 자동으로 이어집니다
«x y» 한 줄
점 (2, 2)는
안에 있습니다
오른쪽으로 뻗은 반직선이 변과 1번 만났습니다. 홀수라 안입니다.
변마다 왜 세었나
| 변 | 높이를 가로지름 | 만나는 x | 셈 |
|---|---|---|---|
| (0,0) → (4,0) | 아니오 | — | · |
| (4,0) → (4,4) | 예 | 4 | ○ |
| (4,4) → (0,4) | 아니오 | — | · |
| (0,4) → (0,0) | 예 | 0 | · |
「높이를 가로지름」은 (yᵢ > py)와 (yⱼ > py)의 참거짓이 다른가로 판정합니다. 한쪽 끝만 포함하는 이 반개구간 규약 덕분에, 점과 같은 높이의 꼭짓점이 두 변에서 두 번 세어지지 않고 위쪽 변에서만 한 번 세어집니다. 조건을 양끝 모두 포함하게 적으면 홀짝이 뒤집혀 답이 통째로 틀립니다 — 한 글자 차이입니다.
계산 방법
- 1꼭짓점을 한 줄에 하나씩 「x y」로 넣습니다. 도는 순서대로 이어지며 마지막 점은 첫 점과 자동으로 이어집니다.
- 2판정할 점을 「x y」로 넣습니다.
- 3그림에서 점에서 오른쪽으로 뻗은 반직선이 어느 변과 만나는지 봅니다.
- 4만난 횟수가 홀수면 안, 짝수면 밖입니다. 변 위에 정확히 놓이면 「경계」로 따로 답합니다.
- 5아래 표에서 변마다 왜 세었는지 또는 왜 세지 않았는지 확인합니다.
자주 묻는 질문
점에서 한쪽으로 반직선을 쏘고 다각형의 변과 몇 번 만나는지 세어 홀수면 안, 짝수면 밖입니다. 아주 먼 곳에서 출발해 변을 하나 넘을 때마다 안팎이 뒤집히기 때문에, 결국 넘은 횟수의 홀짝만 보면 됩니다. 이것을 광선 교차(ray casting) 또는 짝홀 규칙이라고 합니다.
그 꼭짓점을 공유하는 두 변이 각각 교차로 세어져 두 번 세게 되고, 홀짝이 뒤집혀 답이 통째로 틀립니다. 막는 방법은 변의 한쪽 끝만 포함하는 반개구간 규약으로, 「(yᵢ > py)와 (yⱼ > py)의 참거짓이 다른가」로 판정하면 같은 높이의 꼭짓점이 위쪽 변에서만 세어져 정확히 한 번만 세어집니다.
안도 밖도 아닙니다. 이 계산기는 「경계」로 따로 답합니다. 광선 교차만으로 판정하면 규약과 부동소수점 오차에 따라 안이라고도 밖이라고도 나오므로, 경계인지를 먼저 확인해 따로 답하는 것이 정직합니다.
자기교차가 없는 다각형에서는 두 방법의 답이 언제나 같습니다. 스스로 교차하는 다각형에서만 갈리는데, 오각별의 한가운데가 대표적입니다. 광선 교차는 교차가 짝수라 「밖」, 감기 수는 두 바퀴를 감으므로 「안」이라고 합니다.
「안」을 어떻게 정의하느냐의 문제라 둘 다 맞습니다. SVG의 fill-rule에 evenodd(광선 교차)와 nonzero(감기 수)가 모두 있는 것도 그래서이며, 별을 속이 빈 모양으로 그릴지 꽉 찬 모양으로 그릴지가 이 선택으로 갈립니다. 이 계산기는 둘을 나란히 내고 갈리면 갈린다고 알려 줍니다.
됩니다. 광선 교차는 볼록·오목을 가리지 않고, 꼭짓점을 어느 방향으로 돌든 교차 횟수가 같아 판정이 바뀌지 않습니다. 도는 방향은 부호 있는 넓이의 부호로만 드러나며 이 계산기가 함께 보여 줍니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 검증은 축에 나란한 직사각형의 격자점을 전수로 훑어 했습니다. 그런 도형은 「안」이 부등식 하나로 확정되므로, 0.5 간격의 격자점 전체에서 광선 교차의 답과 부등식의 답이 완전히 일치하는지 대조했습니다. 꼭짓점과 같은 높이의 점이 여기에 모두 들어 있어 반개구간 규약이 깨졌다면 반드시 잡힙니다.
- 꼭짓점을 스치는 광선은 따로 고정했습니다. 오각형의 꼭짓점 높이(y = 1)에서 왼쪽·안쪽·오른쪽 세 자리, 그리고 꼭짓점이 하나뿐인 삼각형의 꼭짓점 높이를 지나는 경우를 테스트에 박아 두었습니다.
- 감기 수와 갈리는 경우는 오각별 한가운데로 확인했습니다. 광선 교차는 교차가 짝수라 「밖」, 감기 수는 절대값 2로 「안」이 나오는 것을 고정했습니다.
- 경계 판정은 좌표 크기에 견준 상대 허용오차를 씁니다. 절대값으로 하면 좌표가 20만·50만인 지적도에서는 늘 「위가 아니다」가 나오고, 좌표가 아주 작은 도형에서는 늘 「위」가 나오기 때문입니다.
- 꼭짓점은 200개까지 다루고 변 표는 40줄까지 보입니다. 좌표 읽기와 부호 있는 넓이 계산은 다각형 넓이 계산기와 같은 코드(src/lib/calc/polygonArea.ts)를 씁니다.
- 광선 교차와 감기 수는 정의로 확정되는 계산이라 해가 바뀌어도 달라지지 않습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.