Yehyun Suh

[수학 to 파이썬] 파이썬으로 두 직선의 교차점 구하기 본문

파이썬/수학 to 파이썬

[수학 to 파이썬] 파이썬으로 두 직선의 교차점 구하기

Yehyun Suh 2023. 8. 1. 10:27

4개의 점으로 이루어진 두 직선 사이의 교차점 구하기

1. 선의 기울기 및 방정식 구하기

$$y = \frac{y_2-y_1}{x_2-x_1}(x-x_1)+y_1 = m_1(x-x_1)+y_1, \text{ where } m_1=\frac{y_2-y_1}{x_2-x_1}\\y = \frac{y_4-y_3}{x_4-x_3}(x-x_3)+y_3 = m_2(x-x_3)+y_3, \text{ where } m_2=\frac{y_4-y_3}{x_4-x_3}$$

점 $(x_1,y_1)$ 과 $(x_2,y_2)$, 그리고 $(x_3,y_3)$와 $(x_4,y_4)$를 지나는 선을 구하고, 각 선의 기울기를 $m_1$과 $m_2$로 정의한다.

2. 두 선의 교차점 구하기

두 선이 서로 만나는 교차점을 구하기 위해 $y$에 식을 대입한다.

$$m_1(x-x_1)+y_1= m_2(x-x_3)+y_3\\m_1x-m_1x_1+y_1 = m_2x-m_2x_3+y_3\\(m_1-m_2)x = m_1x_1-y_1-m_2x_3+y_3$$

해당 식으로부터 $x$ 값과
$$x=\frac{m_1x_1-y_1-m_2x_3+y_3}{m_1-m_2}$$

$y$ 값을 구한다.

$$y=m_1(x-x_1)+y_1$$

3. 파이썬 코드

위에서 도출했던 $x$와 $y$를 구하는 식을 코드로 적게 되면 아래와 같다.

def intersection_line_to_line(x1: float, y1: float,
                              x2: float, y2: float,
                              x3: float, y3: float,
                              x4: float, y4: float) -> list:
    """
    두 선의 교차점을 구하는 함수입니다.
        Args:
            x1 (float): 첫번째 좌표의 x값
            y1 (float): 첫번째 좌표의 y값
            x2 (float): 두번째 좌표의 x값
            y2 (float): 두번째 좌표의 y값
            x3 (float): 세번째 좌표의 x값
            y3 (float): 세번째 좌표의 y값
            x3 (float): 네번째 좌표의 x값
            y4 (float): 네번째 좌표의 y값
        Retruns:
            두 선의 교차점 (x,y)를 반환합니다
    """
    m1 = (y2-y1)/(x2-x1)
    m2 = (y4-y3)/(x4-x3)
    if m1 == m2:
        print("두 선이 평행합니다")
        return None
    else:
        x_intersect = (m1*x1-y1-m2*x3+y3)/(m1-m2)
        y_intersect = m1*(x_intersect-x1)+y1
        return [x_intersect, y_intersect]