Comment créer un cercle avec des courbes de Bézier?
Nous avons un point de départ (x, y) et un rayon du cercle. Il existe aussi un moteur qui peut créer un tracé de courbe de Bézier de points.
Comment puis-je créer un cercle à l'aide de courbes de Bézier?
- Étroitement liés: Géométrique l'Arc de Courbe de Bézier
Vous devez vous connecter pour publier un commentaire.
Comme déjà dit: il n'y a pas de représentation exacte du cercle à l'aide de courbes de Bézier.
De terminer les autres réponses : pour la courbe de Bézier avec
n
segments de la optimale distance aux points de contrôle, dans le sens que le milieu de la courbe se trouve sur le cercle lui-même, est(4/3)*tan(pi/(2n))
.Donc pour 4 points, il est
(4/3)*tan(pi/8) = 4*(sqrt(2)-1)/3 = 0.552284749831
.1/cos(pi/n)
.Couverts dans le comp.les graphiques.faq
Extrait:
Sujet 4.04: Comment puis-je insérer une courbe de Bézier à un cercle?
Assez intéressant, courbes de Bézier, peut se rapprocher d'un cercle, mais
ne pas s'adapter parfaitement à un cercle.
Une commune de rapprochement est l'utilisation de quatre beziers pour modèle un cercle, chaque
avec des points de contrôle d'une distance d=r*4*(sqrt(2)-1)/3 à partir de la fin des points
(où r est le rayon du cercle), et dans une direction tangente à la
cercle à la fin des points. Cela permettra d'assurer que le milieu de la
Béziers sont sur le cercle, et que la première dérivée est continue.
La radiale de l'erreur de cette approximation sera d'environ 0.0273% de la
cercle du rayon.
Michael Goldapp, "Rapprochement des arcs de cercle en cubes
les polynômes de" Computer Aided Design Géométrique (#8 de 1991, pp. 227-238)
Tor Dokken et Morten Daehlen, "Bonnes Approximations des cercles
la courbure continue des courbes de Bézier" Géométrique Assistée par Ordinateur
Conception (#7 de 1990, pp. 33-41). http://www.sciencedirect.com/science/article/pii/016783969090019N (non libre de l'article)
Voir aussi la non-paywalled article à http://spencermortensen.com/articles/bezier-circle/
Navigateurs et de l'Élément Canvas.
Noter que certains navigateurs utilisent des courbes de Bézier pour leur toile dessine un arc de cercle, Chrome utilise (pour le moment) 4 approche sectorielle et Safari utilise un 8 secteur de l'approche, la différence est notable qu'à haute résolution, à cause de cela 0.0273%, et également la seule véritablement visible lorsque les arcs sont dessinés en parallèle et de phase, vous remarquerez que les arcs oscillent entre un vrai cercle. L'effet est également de plus en plus perceptibles lorsque la courbe est l'animation autour d'elle radial du centre, 600px rayon est généralement de la taille où il fera une différence.
Certaines API de dessin qui n'est pas vrai arc de rendu, de sorte qu'ils utilisent également des courbes de Bézier, par exemple la plate-forme Flash n'a pas d'arc de l'api de dessin, de sorte que toute les cadres qui offrent des arcs sont généralement en utilisant la même courbe de Bézier approche.
Noter que SVG moteurs dans les navigateurs peuvent utiliser une autre méthode de dessin.
D'autres plates-formes
Quelle que soit la plateforme que vous essayez d'utiliser, il vaut la peine de vérifier pour voir comment arc dessin est fait, de sorte que vous pouvez prédire visual erreurs de ce type, et de s'adapter.
Les réponses à cette question sont très bons, donc il y a peu à ajouter. Inspiré par cela, j'ai commencé à faire une expérience de visuellement confirmer la solution, en commençant par les quatre courbes de Bézier, réduisant le nombre de courbes à un. Étonnamment, j'ai trouvé que, avec trois courbes de Bézier le cercle regardé assez bon pour moi, mais la construction est un peu délicat. En fait j'ai utilisé Inkscape de lieu noir de 1 pixel à l'échelle de Bézier rapprochement sur une red de 3 pixels de large cercle (comme produite par Inkscape). Pour les précisions, j'ai ajouté les lignes bleues et les surfaces montrant les boîtes englobantes des courbes de Bézier.
De vous voir, je vais présenter mes résultats:
L'1-graphe de la courbe (qui ressemble à une baisse coincée dans un coin, juste pour être complet) :
Le 2-graphe de la courbe:
Le 3-graphe de la courbe:
Le 4-graphe de la courbe:
(Je voulais mettre le SVG ou PDF ici, mais qui n'est pas pris en charge)
Il n'est pas possible. Une courbe de Bézier est un cube (au moins... le plus couramment utilisé est). Un cercle ne peut pas être exprimé exactement avec un cube, parce que un cercle contient une racine carrée dans son équation. En conséquence, vous devez approximative.
Pour ce faire, vous devez diviser votre cercle en n-habitants (e.g.les quadrants, octants). Pour chaque n-tant, vous utilisez le premier et le dernier point que la première et la dernière de la courbe de Bézier. La courbe de Bézier polygone nécessite deux points supplémentaires. Pour être rapide, je prendrais les tangentes au cercle pour chaque point extrême de la n-tant et choisir les deux points de l'intersection des deux tangentes (de sorte que, fondamentalement, votre courbe de Bézier polygone est un triangle). Augmenter le nombre de n habitants pour s'adapter à votre précision.
Les autres réponses ont couvert le fait qu'un véritable cercle n'est pas possible. Ce fichier SVG est une approximation en utilisant les courbes de Bézier Quadratiques, et c'est la chose la plus proche que vous pouvez obtenir: http://en.wikipedia.org/wiki/File:Circle_and_quadratic_bezier.svg
Voici un avec les courbes de Bézier Cubiques: http://en.wikipedia.org/wiki/File:Circle_and_cubic_bezier.svg
Beaucoup de réponses déjà, mais j'ai trouvé un petit article en ligne, avec une très bonne courbe de bézier approximation d'un cercle. En termes de cercle unité c = 0.55191502449 où c est la distance de l'axe d'intercepter les points sur les tangentes aux points de contrôle.
Comme un seul quadrant du cercle unité avec les deux du milieu coordonnées étant les points de contrôle.
(0,1),(c,1),(1,c),(1,0)
De la radiale erreur est juste 0.019608% donc j'ai juste eu à ajouter à cette liste de réponses.
L'article peut être trouvé ici Se rapprocher d'un cercle avec des courbes de Bézier cubiques
Je ne suis pas sûr si je devrais ouvrir une nouvelle question puisqu'il s'agit de aproximation mais je suis intéressé par la formule générale pour obtenir des points de contrôle de Bézier de degré et je crois qu'il s'adapte à l'intérieur de cette question.
Toutes les solutions que j'ai trouvé sur le web ne sont que pour les courbes cubiques ou qui sont payés ou je ne comprends même pas (je ne suis pas très bon en maths).
J'ai donc décidé d'essayer de résoudre cela sur mon propre. J'ai été l'étude de la distance du point de contrôle à partir du centre d'un cercle dépend angle donné et jusqu'à présent, j'ai constaté que:
Où
N
est le nombre de points de contrôle pour une seule courbe etα
est un arc de cercle d'angle.Pour la courbe quadratique, il peut être simplifié à
l ≈ r + r * PI*0.1 * pow(α/90, 2)
Le
PI*0.1
est plutôt une supposition, je ne l'ai pas calculer la valeur parfaite, mais il est assez proche.Cela fonctionne raisonnablement bien pour courbe avec 1-2 points de contrôle donnant rayon d'erreur d'environ 0,2% pour les cubes de la courbe. Pour le degré supérieur des courbes de perte de précision est perceptible. Avec 3 points de contrôle de la courbe de ressembler à quadratiques alors, évidemment, je suis de rater quelque chose mais je ne peux pas la comprendre et de cette méthode correspond à mes besoins pour le moment.
Voici démo.
Désolé pour apporter ce un retour d'entre les morts, mais j'ai trouvé ce post très utile, le long de avec cette page à venir avec une extensible formule.
Fondamentalement, vous pouvez créer un près de cercle à l'aide d'une incroyable formule simple qui vous permet d'utiliser n'importe quel nombre de courbes de Bézier sur 4:
Distance = radius * stepAngle /3
Où
Distance
est la distance entre un point de contrôle de Bézier et le plus proche de la fin de l'arc, le rayon est laradius
du cercle, etstepAngle
est l'angle entre les 2 extrémités de l'arc représenté par 2π /(le nombre de courbes).Afin de le frapper d'un seul coup:
Distance = radius * 2π /(the number of curves) /3
Distance = (4/3)*tan(pi/2n)
. Pour un grand nombre d'arcs qu'il est presque le même, parce quetan(pi/2)~pi/2n
, mais par exemple pourn=4
(ce qui est le plus utilisé des cas) votre formule donneDistance=0.5235...
mais le choix optimal estDistance=0.5522...
(si vous avez ~5% d'erreur).C'est une lourde rapprochement qui sera raisonnable ou terrible en fonction de la résolution et de la précision, mais j'utilise sqrt(2)/2 x rayon que mes points de contrôle. J'ai lu un assez long texte comment ce nombre est tiré et il est intéressant de lire mais la formule ci-dessus est le rapide et sale.