Dessiner une courbe de Bézier par trois points donnés
J'ai trois points en 2D et je veux dessiner une courbe de Bézier en passant par eux. Comment dois-je calculer le point de contrôle central (x1
et y1
comme dans quadTo)? Je sais que l'algèbre linéaire à partir de la fac, mais besoin de quelques simple de l'aide sur ce.
Comment puis-je calculer le point de contrôle central, de sorte que la courbe passe par elle ainsi?
Vous devez vous connecter pour publier un commentaire.
Laisser P0, P1, P2 être les points de contrôle, et le Pc sera votre point fixe vous voulez que la courbe de passer à travers.
Alors la courbe de Bézier définie par
...où t va de zéro à 1.
Il y a un nombre infini de réponses à votre question, car il peut passer à travers votre point de pour toute valeur de t... Donc il suffit de choisir un, comme t=0,5, et de résoudre pour P1:
Il y a le "P" les valeurs sont (x,y) paires, alors il suffit d'appliquer l'équation, une fois pour x et pour y:
...où (xc,yc) est le point que vous souhaitez qu'il passe à travers, (x0,y0) est le point de départ, et (x2,y2) est le point de fin. Cela vous donnera une courbe de Bézier qui passe à travers (xc,yc) à t=0.5.
J'ai utilisé Nemos réponse dans mon JavaFX apllication, mais mon but était de dessiner la courbe, de sorte que le visuel turning point de la courbe correspond toujours avec le choisi une fixe (CP).
CP = ControlPoint
SP = point de Départ
EP = Extrémité
BP(t) = variable Point sur BeziérCurve où t est compris entre 0 et 1
À réaliser ce que j'ai fait une variable t (fixe pas de 0,5). Si le Point choisi CP n'est plus dans le milieu entre le PS et PE, vous devez varier t vers le haut ou vers le bas un peu.
Comme une première étape que vous devez savoir si le CP est plus proche de SP ou EP:
Laissez distanceSP la distance entre le pc et le PS
et distanceEP la distance entre le CP et le PE
puis-je définir ratio:
Maintenant, nous allons l'utiliser pour varier t de haut en bas:
remarque: C'est toujours une approximation et 1/3 est choisi par essai et d'erreur.
Voici mon Java-Fonction:
(Point2D est une classe de JavaFX)
J'espère que cette aide.
Si vous ne voulez pas l'exact point milieu, plutôt que vous voulez de toute valeur de t (0 à 1), l'équation est:
Bien sûr, cela fonctionnera aussi pour le point milieu, il suffit de t à 0.5. Simple! 🙂
controlX = pointToPassThroughX/(2*t*(1-t))-startX*t/(2*(1-t))-endX*(1-t)/(2*t)
.