Yehyun Suh

[수학 to 파이썬] 파이썬으로 세 점 사이의 각도 구하기 (1) 본문

파이썬/수학 to 파이썬

[수학 to 파이썬] 파이썬으로 세 점 사이의 각도 구하기 (1)

Yehyun Suh 2023. 8. 1. 23:23

세 점 사이의 각도 구하기 (1) - 두 선의 기울기 차이를 이용한 각도 계산

1. 기준점을 (0, 0)으로 바꿔주기

계산 과정을 조금 더 쉽게 이해하기 위해 각도를 계산하는 기준점인 $(x_2, y_2)$를 $(0, 0)$으로 옮긴다. 이때, $\theta_2$는 $\vec{BA}$와 $x$축 사이의 각도이며, $\theta_1$는 $\vec{BC}$와 $x$축 사이의 각도이다.

 

2. 두 선의 기울기 $\theta_1$과 $\theta_2$ 계산하기

 $\theta_2$는 $$\tan\theta_2=\frac{y_1-y_2}{x_1-x_2}\\ \theta_2=\arctan(\frac{y_1-y_2}{x_1-x_2})$$를 통해 구할 수 있고, 비슷한 원리로 $\theta_1$은 $$\tan\theta_1=\frac{y_3-y_2}{x_3-x_2}\\ \theta_1=\arctan(\frac{y_3-y_2}{x_3-x_2})$$ 로 구할 수 있다.

 

3. 각도 계산하기

위 그림에서 알 수 있듯이, $$\theta=\theta_2-\theta_1$$이므로 $$\theta=\arctan(\frac{y_1-y_2}{x_1-x_2})-\arctan(\frac{y_3-y_2}{x_3-x_2})$$이다.

4. 파이썬 코드

위에서 도출했던 $\theta$를 구하는 식을 코드로 적게 되면 아래와 같다. 참고로 math.atan() 함수는 radian 값을 반환하기 때문에, radian 값을 degree로 바꿔주는 math.degrees() 함수를 사용하여야 한다.

만약 math 라이브러리를 다운 받은 적이 없다면, 터미널에서

pip3 install math

를 실행하여 math 라이브러리를 다운 받는다.

import math


def angle_by_gradient_difference(x1: float, y1: float, x2: float, y2: float,
                                 x3: float, y3: float) -> list:
    """
    세 점 사이의 각도를 두 선의 기울기 차이로 계산하는 함수입니다.
        Args:
            x1 (float): 첫번째 좌표의 x값
            y1 (float): 첫번째 좌표의 y값
            x2 (float): 두번째 좌표의 x값 - 기준점
            y2 (float): 두번째 좌표의 y값 - 기준점
            x3 (float): 세번째 좌표의 x값
            y3 (float): 세번째 좌표의 y값
        Retruns:
            세 점 사이의 각도를 반환합니다.
    """
    theta1 = math.degrees(math.atan((y3-y2)/(x3-x2)))
    theta2 = math.degrees(math.atan((y1-y2)/(x1-x2)))
    theta = abs(theta2 - theta1)

    return theta