Python) 직선 기준 점 대칭 이동 구현
2022. 4. 29. 00:59ㆍ분석 Python/구현 및 자료
직선과 점이 있을 때 대칭 점을 구하는 파이썬 코드를 구현해봤다.
위의 그림처럼 우리가 하나의 직선을 알고 하나의 점(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
'분석 Python > 구현 및 자료' 카테고리의 다른 글
[Python] 이산화된 공간 안에 속하는 좌표 찾기 (0) | 2022.05.19 |
---|---|
Python) list와 nested list안에 값을 기준으로 병합하는 코드 (2) | 2022.05.06 |
Python) 고객 생애 가치(CLV) 예측하기 (0) | 2022.03.17 |
Python) 고객 생애 가치(CLV)에 대해서 알아보기 (0) | 2022.03.17 |
Python) pydantic 알아보기 (1) | 2022.03.14 |