


Tutoriel de dessin sur toile html5 (11) : utilisez lineTo/arc/bezierCurveTo pour dessiner un didacticiel oval_html5.
Dans Canvas, vous pouvez facilement utiliser la méthode de l'arc pour dessiner un cercle. À l'origine, un cercle peut également être considéré comme une ellipse de largeur et de hauteur égales, mais il n'existe aucun moyen de dessiner une ellipse dans Canvas. pour le simuler.
Nous devons d'abord clarifier quels paramètres sont nécessaires pour dessiner une ellipse. Les connaissances géométriques de base nous disent qu'une ellipse nécessite des coordonnées centrales, une largeur, une hauteur - ou un angle de rotation, mais cela peut être omis pour le moment, la rotation est plus facile.
1. Utilisez lineTo pour dessiner des ellipses
Vous avez bien lu, lineTo, une méthode purement utilisée pour dessiner des lignes droites, peut en fait être utilisée pour dessiner des ellipses ! ? Mais il existe, mais la méthode d'écriture est vraiment incroyable :
function DrawEllipse(Canvas,O,OA,OB){
//Dessinez une ellipse, exemple : var B=new Array(150,150); ;
avec ( Canvas){
var x=O[0] OA
var y=O[1];
moveTo(x,y); 0;i<=360 ;i ){
var ii=i*Math.PI/180;
var x=O[0] OA*Math.cos(ii); [1]-OB* Math.sin(ii);
lineTo(x,y);
}
}
}
Le principe de cette méthode est qu'un cercle a 360 degrés, puis utilisez lineTo pour faire une boucle 360 fois, tracez des segments de ligne pour chaque degré et enfin connectez-les en une ellipse. Les fonctions trigonométriques sinus et cosinus sont nécessaires au calcul.
L'idée est très étrange et l'ellipse dessinée est relativement lisse. Mais cela ne vaut pas la peine d'être utilisé par tout le monde – cette méthode effectuera un cycle 360 fois à chaque fois qu'elle dessine une ellipse, et ne dessine qu'un peu plus d'ellipses, ce qui est un test des performances du navigateur.
Nous avons juste besoin de comprendre ses idées
2. Utilisez un arc pour dessiner un cercle, puis redimensionnez-le en une ellipse
Le texte original de cette méthode est ici, et le noyau la fonction est la suivante :
var centerX = 0;
var centerY = 0;
// enregistrer l'état
context.save();
// traduire le contexte
context.translate(canvas.width / 2, canvas.height / 2); horizontalement
context.scale( 2, 1);
// dessine un cercle qui sera étiré en un ovale
context.beginPath(); , 2 * Math.PI, false );
// restaurer l'état d'origine
context.restore()
Cette méthode utilise une fonction canevas dont je n'ai jamais parlé auparavant , à savoir l'échelle, qui peut implémenter un canevas de zoom. Il existe deux directions de mise à l'échelle : horizontale et verticale. Dans le code, le canevas est agrandi dans la direction horizontale, mais la direction verticale reste inchangée. Ainsi, le cercle dessiné par l'arc devient une ellipse.
Cette méthode a l'air très bien à première vue, avec moins de code et le principe est facile à comprendre. Mais après analyse, vous pouvez découvrir ses défauts évidents, à savoir : l'imprécision ! Par exemple, j'ai besoin d'une ellipse d'une largeur de 171 et d'une hauteur de 56. Si nous fixons le rayon d'arc à 28, alors nous serons déprimés par le nombre douloureux et incompréhensible 171/28/2.
Mais un compromis est de toujours fixer le rayon d'arc à 100, puis de l'agrandir s'il ne suffit pas, et de le rétrécir s'il le dépasse. Cependant, ce n'est toujours pas précis.
3, utilisez la courbe de Bézier bezierCurveTo
Comme je sentais que la méthode de mise à l'échelle ci-dessus était inexacte, je voulais trouver une méthode précise pour dessiner une ellipse, et je l'ai finalement trouvée sur stackoverflow :
Copier le code
ye = y h, // y-end
xm = x w / 2, // x-middle
ym = y h / 2 /; / y-milieu
ctx.beginPath();
ctx.moveTo(x, ym);
ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); 🎜 >ctx.bezierCurveTo(xm ox, y, xe, ym - oy, xe, ym);
ctx.bezierCurveTo(xe, ym oy, xm ox, ye, xm, ye); ( xm - bœuf, vous, x, ym oy, x, ym);
ctx.closePath();
ctx.AVC
}
Cette méthode peut être considérée comme parfaite. Il a divisé une ellipse en quatre courbes de Bézier et les a reliées pour former une ellipse. Enfin, la largeur et la hauteur sont plus précises et les frais généraux sont moindres.
Mais cette méthode présente encore des défauts. Regardez le paramètre kappa, il a une valeur très particulière. Je pense que beaucoup de gens ne comprennent pas pourquoi il doit s'agir de cette valeur jusqu'à ce qu'un expert en géométrie vous dise pourquoi il doit s'agir de cette valeur - je ne le sais toujours pas. Et j’ai une forte envie de changer cela et de voir quelles en seront les conséquences.
Bien sûr, mon impulsion similaire à celle d'un patient atteint d'un trouble obsessionnel-compulsif ne peut pas être considérée comme un défaut de cette méthode. Son véritable défaut est : pourquoi utiliser 4 courbes de Bézier ? Personnellement, j'ai l'impression qu'une ellipse est évidemment composée de deux courbes de Bézier au lieu de quatre. Cette idée m'a finalement conduit à la manière parfaite de dessiner une ellipse.
4, utilisez deux courbes de Bézier pour dessiner une ellipse
Afin de comprendre si la méthode précédente peut être simplifiée, j'ai spécialement enregistré un compte stackoverflow pour poser des questions Puisqu'il y a des images dans le. question, je n’avais pas assez de points à transférer, j’ai donc dû utiliser mon anglais à peine adéquat pour répondre aux questions des étrangers afin de gagner des points. Mais la chance est finalement venue et mon problème de points a été résolu en répondant à une question.
La question que j'ai posée sur la relation entre les courbes de Bézier et les ellipses est ici
Pour être honnête, je n'ai pas compris la plupart des réponses de l'étranger ci-dessous, mais heureusement, il a fourni un exemple de page de code, qui m'a fait comprendre. . Principe, je tiens à lui exprimer à nouveau ma gratitude. D'après sa réponse, la méthode que j'ai trouvée pour dessiner une ellipse est la suivante :
//Ellipse
CanvasRenderingContext2D.prototype.oval = function (x, y, width, height) {
var k = (width/0.75)/2,
w = width/ 2,
h = height/2;
this.beginPath();
this.moveTo(x, y-h);
this.bezierCurveTo(x k, y-h, x k); , y h, x, y h );
this.bezierCurveTo(x-k, y h, x-k, y-h, x, y-h);
this.closePath();
return this;
Cette méthode est précise, nécessite moins de code et ne présente aucune bizarrerie étrange. N'oubliez pas ceci, le rapport entre la largeur de l'ellipse et les coordonnées des points de contrôle de la courbe de Bézier qui dessine l'ellipse est le suivant :
Vous pouvez essayer les 4 méthodes ci-dessus pour dessiner une ellipse.
Si vous trouvez une méthode plus simple, partagez-la avec nous pour en discuter.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'architecture GPU de nouvelle génération d'Intel devrait être lancée en septembre dans le cadre d'Intel Lunar Lake. Comme l'iGPU Arc Alchemist de Meteor Lake, l'iGPU possède jusqu'à 8 cœurs Xe, mais la nouvelle architecture devrait atteindre des performances 50 % plus élevées.

Les plug-ins de flèches du canevas incluent : 1. Fabric.js, qui possède une API simple et facile à utiliser et peut créer des effets de flèche personnalisés ; 2. Konva.js, qui fournit la fonction de dessiner des flèches et peut créer diverses flèches ; styles ; 3. Pixi.js, qui fournit des fonctions de traitement graphique riches et peut obtenir divers effets de flèche ; 4. Two.js, qui peut facilement créer et contrôler des styles de flèches et des animations 5. Arrow.js, qui peut créer divers effets de flèche ; ; 6. Rough .js, vous pouvez créer des flèches dessinées à la main, etc.

Les détails de l'horloge sur toile incluent l'apparence de l'horloge, les graduations, l'horloge numérique, les aiguilles des heures, des minutes et des secondes, le point central, les effets d'animation, d'autres styles, etc. Introduction détaillée : 1. Apparence de l'horloge, vous pouvez utiliser Canvas pour dessiner un cadran circulaire comme apparence de l'horloge, et vous pouvez définir la taille, la couleur, la bordure et d'autres styles du cadran 2. Lignes d'échelle, tracez des lignes d'échelle dessus ; le cadran pour représenter les heures ou les minutes. Position ; 3. Horloge numérique, vous pouvez dessiner une horloge numérique sur le cadran pour indiquer l'heure et les minutes actuelles ; 4. Aiguille des heures, aiguille des minutes, aiguille des secondes, etc.

Explorez le framework Canvas : Pour comprendre quels sont les frameworks Canvas couramment utilisés, des exemples de code spécifiques sont nécessaires. Introduction : Canvas est une API de dessin fournie en HTML5, grâce à laquelle nous pouvons obtenir des graphiques et des effets d'animation riches. Afin d'améliorer l'efficacité et la commodité du dessin, de nombreux développeurs ont développé différents frameworks Canvas. Cet article présentera certains frameworks Canvas couramment utilisés et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre comment utiliser ces frameworks. 1.Cadre EaselJSEa

Les versions de html2canvas incluent html2canvas v0.x, html2canvas v1.x, etc. Introduction détaillée : 1. html2canvas v0.x, qui est une première version de html2canvas. La dernière version stable est la v0.5.0-alpha1. Il s'agit d'une version mature qui a été largement utilisée et vérifiée dans de nombreux projets ; 2. html2canvas v1.x, il s'agit d'une nouvelle version de html2canvas.

Comment utiliser Canvas pour dessiner des graphiques et des effets d'animation dans Uniapp nécessite des exemples de code spécifiques 1. Introduction Avec la popularité des appareils mobiles, de plus en plus d'applications doivent afficher divers graphiques et effets d'animation sur le terminal mobile. En tant que framework de développement multiplateforme basé sur Vue.js, uniapp offre la possibilité d'utiliser un canevas pour dessiner des graphiques et des effets d'animation. Cet article présentera comment Uniapp utilise Canvas pour obtenir des effets de graphique et d'animation, et donnera des exemples de code spécifiques. 2. toile

Les attributs du canevas tkinter incluent bg, bd, relief, width, height, curseur, highlightbackground, highlightcolor, highlightthickness, insertbackground, insertwidth, selectbackground, selectforeground, les attributs xscrollcommand, etc. Présentation détaillée

Comprendre la puissance et l'application du canevas dans le développement de jeux Présentation : Avec le développement rapide de la technologie Internet, les jeux Web deviennent de plus en plus populaires parmi les joueurs. En tant qu'élément important du développement de jeux Web, la technologie Canvas a progressivement émergé dans le développement de jeux, démontrant sa puissance et ses applications puissantes. Cet article présentera le potentiel du canevas dans le développement de jeux et démontrera son application à travers des exemples de code spécifiques. 1. Introduction à la technologie Canvas Canvas est un nouvel élément HTML5 qui nous permet d'utiliser
