zenn.skin 무료버전 배포중!
자세히보기

CS/알고리즘

[Python] CCW(Counter Clock Wise)

koosco! 2023. 2. 6. 20:46

Counter Clock Wise는 오른손 법칙을 이용해 주어진 세 점의 방향성을 알 수 있는 알고리즘입니다.

오른손 법칙
A(2, 2) B(5, 5) C(7, 3)

 

위와 같이 세 점이 주어질 때 이들 벡터와 CCW 알고리즘을 이용해 세 점의 방향을 구할 수 있습니다.

A를 기준으로 B와 C에 대한 벡터들의 외적을 구합니다.

여기서는 외적의 결과가 음수기 때문에 오른손 법칙에 의해 세 점이 시계 방향을 갖는 것을 확인할 수 있습니다.

2차원에서의 외적은 z값을 0으로 놓고 계산하여 구할 수 있습니다.

각각 반시계 / 평행 / 시계 방향을 나타냄

 

x1, y2, z3 = map(int, input().split())
x2, y2, z3 = map(int, input().split())
x3, y3, z3 = map(int, input().split())

u = (x2 - x1, y2 - y1, z2 - z1)
v = (x3 - x1, y3 - y1, z3 - z1)
product = u[1]*v[2] - u[2]*v[1] - (u[0]*v[2] - u[2]*v[0]) + \
            u[0]*v[1] - u[1]*v[0]
if product > 0: res = 1
elif product == 0: res = 0
else: res = -1
print(res)

반시계 방향인 경우 1, 평행인 경우 0, 시계 방향인 경우 -1을 출력합니다.

 

'CS/알고리즘'의 다른글

  • 현재글 [Python] CCW(Counter Clock Wise)

관련글