Java에서 Quad2D 또는 베 지어 곡선을 성공적으로 그렸습니다. 나는 같은 방정식을 가지고있다. 그러나 특정 점 (x, y)이 곡선에 있는지 여부를 결정해야합니다. 내가 Quad2D.contains 및 몇 가지 GeneralPath API를 사용하여 시도, 내가 결과를 정확하게 얻을 수 없습니다.포인트가 Quad2DCurve에 있는지 여부를 확인하는 방법
누군가가이 해결책을 찾는데 도움을 줄 수 있습니까?
Java에서 Quad2D 또는 베 지어 곡선을 성공적으로 그렸습니다. 나는 같은 방정식을 가지고있다. 그러나 특정 점 (x, y)이 곡선에 있는지 여부를 결정해야합니다. 내가 Quad2D.contains 및 몇 가지 GeneralPath API를 사용하여 시도, 내가 결과를 정확하게 얻을 수 없습니다.포인트가 Quad2DCurve에 있는지 여부를 확인하는 방법
누군가가이 해결책을 찾는데 도움을 줄 수 있습니까?
저는 여러분이 2 차 베 지어 커브 인 QuadCurve2D 클래스를 의미했다고 생각합니다. 미리 준비된 방법이없는 것 같고 문제는 점에서 베 지어 곡선까지의 거리에 있습니다. P0가 포인트가됩니다. P1
이 시작 지점이됩니다. P2
- 제어점이며 P3
은 곡선의 끝점입니다. 이어서 커브 포인트 및 P
P0
사이되는 거리를 최소화 할 것 같은 t
있다
P = B(t)
하여 설명한다. 거리가 0 또는 특정 오차보다 작 으면
F(t) = (B(t)_x - P0_x)^2 + (B(t)_y - P0_y)^2 -> min
다음 P0은 곡선이다. t는 F'
비용 함수의 1 차 미분이고, 두 번째 F''
그 유도체이고 비용 함수를
t_n = t_n-1 + F'(t)/F''(t)
을 최소화하여 Netwon의 반복적 인 방법으로 확인할 수있다. 차 베지에 곡선 B '(t)의
F'(t) = 2 * (B(t)_x - P0_x) * B'(t)_x + 2 * (B(t)_y - P0_y) * B'(t)_y
F''(t) = 2 * B'(t)_x * B'(t)_x + 2 * (B(t)_x - P0_x) * B''(t)_x +
2 * B'(t)_y * B'(t)_y + 2 * (B(t)_y - P0_x) * B''(t)_y
1 차 도함수는 시작점과 끝점 (P2 - P1)
(P3 - P2)
와 선분이다. 2 차 미분 B''(t)
은 P3 - 2 * P2 + P1
입니다.
모든 것을 함께 연결하면 t
에 대한 수식이 제공되며 그 중 F(t)
은 최소화됩니다.