2011-07-26 10 views
3

마우스 위치에 가장 가까운 점을 2 차 곡선에서 계산하는 데 문제가 있습니다. 몇 가지 API를 시도했지만 작동하는 함수를 찾지 못했습니다. 5 차 큐빅 베 지어 곡선에서 작동하는 구현을 발견했지만 2 차 곡선으로 변환하는 수학 기술이 없습니다. t 값을 갖고 있다면 문제를 해결하는 데 도움이되는 몇 가지 방법을 찾았지만 t를 찾는 방법을 모릅니다. 누군가가 t를 찾는 알고리즘이나 2 차 곡선의 가장 가까운 점을 임의의 점으로 찾는 예제 코드를 알려 주면 매우 감사하게 생각합니다.2 차 베 지어 곡선의 가장 가까운 점

감사

+0

대부분 5 차 곡선에 대한 구현은 수정하지 않고 2 차 곡선에서도 작동합니다. – toto2

답변

1

수학을 시작할 수 있습니다. 나는 베 지어 정의하는 방법을 차 모르겠지만, 해당 에 있어야합니다 :

(x(t), y(t)) = (a_x + b_x t + c_x t^2, a_y + b_y t + c_y t^2), 

0 < t < 1. a, b, c는 곡선을 정의하는 6 개의 상수입니다.

당신은 (X, Y)까지의 거리를 원하는 :

sqrt((X - x(t))^2 + (Y - y(t))^2 ) 

위의 양을 최소화 t, 당신이 t과의 1 차 미분 상대를 취할를 찾으려면 0으로 그와 동일하게 설정입니다. t에서 차 방정식이

0 = (a_x - X + b_x t + c_x t^2) (b_x + 2 c-x t) + (a_y - Y + b_y t + c_y t^2) (b_y + 2 c_y t) 

: 이것은합니다 (SQRT 2의 요소를 삭제) 제공합니다. 분석 솔루션은 이미 알려져 있으며 웹에서 찾을 수 있습니다. t의 힘의 계수 (즉, 0 = a + bt + ct^2 + dt^3)를 얻기 위해 대수학을 약간 수행해야 할 것입니다. 예를 들어 Newton-Raphson을 사용하여 숫자 방정식을 대신 풀 수 있습니다.

그러나 세 가지 솔루션이 모두 0 < t < 1에없는 경우에주의하십시오. 이 경우 (X, Y) (첫 번째 방정식)까지의 거리 값을 t = 0t = 1으로 계산하고 둘 중 가장 작은 거리를 계산하면됩니다.

편집 :
당신이 1 차 미분 = 0를 해결할 때 실제로, 당신이 얻을 솔루션은 최대 거리뿐만 아니라 최소가 될 수 있습니다. 따라서 얻을 수있는 솔루션의 거리 (1 차 방정식) (t의 값은 최대 3 개)와 t=0t=1의 거리를 계산하고 모든 값의 실제 최소값을 선택해야합니다.

+0

수학은 큰 도움이되었습니다. 팁 덕분입니다. 나는 내 문제를 알아 냈다. – matt

-1

벙어리, 순진 방법은 작은 하나가 승자 인 상태, 곡선의 모든 지점을 통해 반복하고 그 시점과 마우스 위치 사이의 거리를 계산하는 것입니다. 응용 프로그램에 따라 그보다 더 나은 무언가로 가야 할 수도 있습니다.

+1

커브의 모든 점? 어떻게 그 일을합니까? –

+0

커브가 알려진 좌표 목록에서 생성 된 경우. 그렇지 않다면 다른 해결책이 필요합니다. –

+1

이것은 베 지어 곡선입니다. 따라서 좌표는 커브의 점이 아닌 제어점 만 제공합니다. –

0

온라인으로 사용할 수있는 Java here에 쉽게 적용 할 수있는 ActionScript 구현이 있습니다.

Google 도서 here에서 정독 할 수있는 책 "그래픽 보석"의 알고리즘에서 파생되었습니다.

관련 문제