Python) 직선 기준 점 대칭 이동 구현

2022. 4. 29. 00:59분석 Python/구현 및 자료

728x90

직선과 점이 있을 때 대칭 점을 구하는 파이썬 코드를 구현해봤다.

 

위의 그림처럼 우리가 하나의 직선을 알고 하나의 점(A)을 알 때 A'를 구하는 방법이다.

 실제 구현하는 공식은 다음과 같다.

그래서 우리가 알아야 하는 것은 2개이다. 

바로 점의 좌표와 직선의 방정식을 구하면 된다.

 

 

def get_symmetry_point(two_point,one_point):
    dx, dy = np.array(two_point[0]) - np.array(two_point[1])
    w = dy / dx
    b = two_point[0][1] - w * two_point[0][0]
    x1, y1 = one_point[1]

    new_x0 = x1 - 2 * w * (w * x1 - 1 * y1 + b) / (w**2 + 1)
    new_y0 = y1 - 2 * -1 * (w * x1 - 1 * y1 + b) / (w**2 + 1)
    return new_x0, new_y0

일단 우리는 2개의 점을 알면 직선의 방식을 계산할 수 있다.

그래서 2개의 점을 안다는 가정 하에 풀어보자

 

만약 직선의 방정식에서 (0,5)와 (5,0)을 안다면 직선의 방정식은 y= -x+5가 될 것이다.

그다음에 공식을 대입하면 다음과 같다.

two_point = [[0,5],[5,0]]
one_point = [5,5]
get_symmetry_point(two_point=two_point,one_point=one_point)
# (0,0)

 

생각보다 구현된 코드가 없어서 당황하면서 직접 구현을 해보니, 나름 예전에 공식을 외우던 시기가 생각이 나서 좋았다.

 

 

728x90