2011-09-15 5 views
0

J'ai dessiné avec succès une courbe Quad2D ou Bezier en java. J'ai l'équation pour la même chose. Mais j'ai besoin de déterminer si un point particulier (x, y) se trouve sur la courbe ou non. J'ai essayé d'utiliser Quad2D.contains et quelques API GeneralPath, je ne pouvais pas obtenir le résultat avec précision.Comment déterminer si un point se trouve sur Quad2DCurve

Quelqu'un peut-il aider à trouver la solution?

Répondre

0

Je pense que vous avez voulu dire la classe QuadCurve2D, qui est une courbe de Bézier quadratique. Il semble n'y avoir aucune méthode prête à l'emploi pour cela, et le problème vient à la distance du point à la courbe de Bézier. Let's P0 sera votre point, P1 est un point de départ, P2 - un point de contrôle et P3 est un point final de votre courbe. Ensuite point de la courbe sera donnée par

P = B(t) 

Il est tel t, pour laquelle la distance entre P et P0 sera minime.

F(t) = (B(t)_x - P0_x)^2 + (B(t)_y - P0_y)^2 -> min 

Si la distance est 0 ou inférieure à une erreur, alors PO est sur la courbe. t peuvent être trouvés par la méthode itérative de NETWON en minimisant la fonction de coût

t_n = t_n-1 + F'(t)/F''(t) 

F' est dérivée première de la fonction de coût et F'' est sa dérivée seconde.

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 

la dérivée première de la courbe de Bézier quadratique B '(t) est un segment de droite avec un point de départ et le point final (P2 - P1)(P3 - P2). Le deuxième dérivé B''(t) est un point P3 - 2 * P2 + P1. Le branchement de tous les éléments donnera une formule à t pour laquelle F(t) est minime.

Questions connexes