2010-12-08 28 views
3

J'essaie de créer un simple sommet arrondi à un rectangle. J'ai pu utiliser la méthode bezierCurveTo pour créer le plafond, mais j'ai dû jouer avec les valeurs y du point de contrôle pour obtenir la bonne hauteur de la courbe. Si j'ai la largeur et que je connais la hauteur que je veux que la courbe traverse, est-ce une formule pour trouver les valeurs y du point de contrôle? la fonction que j'ai est en ce momentTrouver la hauteur d'une courbe de Bézier dans la toile

c.moveTo(130,55); 
c.bezierCurveTo(130,-18,0,-18,0,55); 

-18 est ce que je devais définir les valeurs y pour obtenir la courbe pour passer approximativement par y = 0.

+0

Avez-vous besoin d'utiliser la courbe de Bézier et toute sa puissance, ou est-ce qu'un arcTo circulaire simple vous donnerait ce dont vous avez besoin? – Phrogz

+0

@Phrogz Techniquement non, mais j'aime comment la courbe de bezier est plus droite sur les côtés menant dans la section droite. Comme je l'ai mentionné j'ai quelque chose qui fonctionne je me demandais juste ce que la formule serait si j'avais à nouveau ce problème. – qw3n

Répondre

4

Oui, il y a une réponse simple pour cette version contrainte des courbes de Bézier. Prenant la définition d'une courbe de Bézier cubique de wikipedia here, et en résolvant pour le point médian le long de la courbe (t = 0,5), la valeur minimum de y sera:

1/4 Ymax + 3/4 Ymin 

(Ymax étant la valeur y de la points de début et de fin et Ymin étant la valeur y des deux points de contrôle). Ou, pour le milieu à 0,

Ymin = -1/3 Ymax. 

Alors, puisque vous avez Ymax = 55, Ymin doit être -1/3 * 55 = -18,333 .. - ce qui est la raison pour laquelle 18 travaillé dans votre Exemple.

+0

J'avais presque oublié cette question merci pour la réponse. – qw3n