반시계 판별

IT 위키
AlanTuring (토론 | 기여)님의 2025년 4월 5일 (토) 01:22 판 (새 문서: 반시계 판별(counter-clockwise test)은 2차원 평면에서 세 점 A, B, C가 주어졌을 때, 이 점들이 만드는 꺾임 방향이 '''반시계 방향인지'''를 수학적으로 판단하는 연산이다. '''좌회전 판정'''이라고도 불리며, 계산기하학에서 가장 핵심적인 기초 도구 중 하나이다. 볼록 껍질 (알고리즘), 선분 교차 판정, 다각형 내부 판정 등 다양한 기하 알고리즘에서 사용된다. ==...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

반시계 판별(counter-clockwise test)은 2차원 평면에서 세 점 A, B, C가 주어졌을 때, 이 점들이 만드는 꺾임 방향이 반시계 방향인지를 수학적으로 판단하는 연산이다. 좌회전 판정이라고도 불리며, 계산기하학에서 가장 핵심적인 기초 도구 중 하나이다. 볼록 껍질 (알고리즘), 선분 교차 판정, 다각형 내부 판정 등 다양한 기하 알고리즘에서 사용된다.

개념

점 A(x₁, y₁), B(x₂, y₂), C(x₃, y₃)가 주어졌을 때, 이 세 점을 순서대로 연결한 삼각형이 반시계 방향으로 꺾이는지, 시계 방향인지, 혹은 일직선 위에 놓여 있는지를 판별한다.

다양한 이름

  • 반시계 판별 (counter-clockwise test)
  • 좌회전 판정 (left-turn test)
  • 방향성 판별 (orientation test)
  • ccw 알고리즘 (ccw: counter-clockwise)
  • 삼점 방향성 테스트 (orientation of three points)

이들은 모두 같은 수학적/기하학적 문제를 가리키며, 사용하는 문맥이나 언어에 따라 명칭만 다르다.

수식

세 점 A, B, C에 대해 다음 값을 계산한다:

ccw(A, B, C) = (x₂ - x₁)(y₃ - y₁) - (y₂ - y₁)(x₃ - x₁)

또는 벡터 외적을 통한 표현:

  • AB = (x₂ - x₁, y₂ - y₁)
  • AC = (x₃ - x₁, y₃ - y₁)
  • AB × AC = (x₂ - x₁)(y₃ - y₁) - (y₂ - y₁)(x₃ - x₁)

판별 기준

  • ccw(A, B, C) > 0 → 반시계 방향 (좌회전)
  • ccw(A, B, C) < 0 → 시계 방향 (우회전)
  • ccw(A, B, C) = 0 → 일직선

그래픽적 의미

  • 점 A에서 B로 진행한 뒤, 점 C로 꺾이는 방향을 판단
  • 반시계 방향이면 '왼쪽으로 도는 느낌', 시계 방향이면 '오른쪽으로 도는 느낌'

파이썬 예시

def ccw(a, b, c):
    x1, y1 = a
    x2, y2 = b
    x3, y3 = c
    return (x2 - x1)*(y3 - y1) - (y2 - y1)*(x3 - x1)

활용

같이 보기

참고 문헌