점에서 원에 그은 접선
기하2016. 1. 2. 20:06
점 P에서 중심이 O이고 반지름이 r인 원에 접선을 그었을 때, 그 접점을 Q라 하자. OP의 방향을 u, POQ의 크기를 v라 하면 OQ의 방향은 u+v 또는 u-v가 됨을 알 수 있다.
OP의 방향은 atan2 함수로 구할 수 있고, POQ의 크기는 OP의 길이와 OQ의 길이를 알고 있으므로 acos으로 구할 수 있다.
def angle(P, O, r): OP = ( (P.x - O.x) ** 2 + (P.y - O.y) ** 2 ) ** 0.5 u = atan2 ( P.x - O.x, P.y - O.y ) v = acos ( r / OP ) return ( u + v , u - v )
'기하' 카테고리의 다른 글
점과 선분 사이의 거리 (0) | 2016.01.02 |
---|---|
점과 직선 사이의 거리 (0) | 2016.01.02 |
점과 선분 사이의 거리
기하2016. 1. 2. 19:25
0 이상 1 이하의 실수 t에 대하여 선분 AB를 t:(1-t)로 내분하는 점을 Q라고 하자. 선분 PQ의 길이를 f(t)라고 할 때, 함수 f는 아래로 볼록함을 알 수 있다. (즉, f''(t) >= 0)
함수 f의 최솟값이 점 P와 선분 AB 사이의 거리가 되고, 이는 이분탐색을 통해 구할 수 있다.
def dist(P, A, B): for i in range(100): if (P.x - A.x) ** 2 + (P.y - A.y) ** 2 > (P.x - B.x) ** 2 + (P.y - B.y) ** 2: A = (A + B) / 2 else: B = (A + B) / 2 dist = ( (P.x - A.x) ** 2 + (P.y - A.y) ** 2 ) ** 0.5 return ( dist )
점과 직선 사이의 거리를 응용하면 이분탐색을 하지 않고 거리를 구할 수 있다.
'기하' 카테고리의 다른 글
점에서 원에 그은 접선 (0) | 2016.01.02 |
---|---|
점과 직선 사이의 거리 (0) | 2016.01.02 |
점과 직선 사이의 거리
기하2016. 1. 2. 18:51
점 P에서 직선 AB에 내린 수선의 발을 H라 하자. 선분 PH의 길이가 점 P와 직선 AB사이의 거리가 된다.
또한, 삼각형 PAB의 넓이는 AB*PH/2 임을 알 수 있다.
삼각형 PAB의 넓이는 외적으로 구할 수 있고, 선분 AB의 길이는 두 점 사이의 거리로 구할 수 있으므로 선분 PH의 길이는 다음처럼 구할 수 있다.
def dist(P, A, B): area = abs ( (A.x - P.x) * (B.y - P.y) - (A.y - P.y) * (B.x - P.x) ) AB = ( (A.x - B.x) ** 2 + (A.y - B.y) ** 2 ) ** 0.5 return ( area / AB )
'기하' 카테고리의 다른 글
점에서 원에 그은 접선 (0) | 2016.01.02 |
---|---|
점과 선분 사이의 거리 (0) | 2016.01.02 |