J'ai besoin de savoir dessiner des polygones sur une toile. Sans utiliser jQuery ou quelque chose comme ça.Comment dessiner des polygones sur un canevas HTML5?
Répondre
créer un chemin avec moveTo
et lineTo
(live demo):
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100,50);
ctx.lineTo(50, 100);
ctx.lineTo(0, 90);
ctx.closePath();
ctx.fill();
+1, je n'avais aucune idée jsFiddle soutenu les toiles HTML5. –
@Gio Borje: AFAIK, jsFiddle ne se soucie pas de la toile, c'est votre navigateur. jsFiddle ne fait que renvoyer votre code HTML/CSS/JS. –
Excellente solution. Code très soigné. merci @phihag. Quelque chose que je peux comprendre! – sparkle
//poly [x,y, x,y, x,y.....];
var poly=[ 5,5, 100,50, 50,100, 10,90 ];
var canvas=document.getElementById("canvas")
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f00';
ctx.beginPath();
ctx.moveTo(poly[0], poly[1]);
for(item=2 ; item < poly.length-1 ; item+=2){ctx.lineTo(poly[item] , poly[item+1])}
ctx.closePath();
ctx.fill();
C'est pourquoi je voudrais pouvoir fondamentalement comprendre la méthode JavaScript 'for' de vanilla. Cette ligne de code a tellement simplifié les choses. J'utilise généralement le jQuery '.each()' mais son application est beaucoup moins polyvalente. –
@AlexanderDixon Le javascript ci-dessus n'est vraiment pas un bon exemple.* Toutes les variables * ont besoin de 'var', dans le code ci-dessus' item' est une pollution de l'espace de noms global. Tout est sur une ligne, ce qui réduit la lisibilité. Si vous ne vous souciez pas de la lisibilité, vous pouvez également retirer les accolades. Ce – Annan
de http://www.scienceprimer.com/drawing-regular-polygons-javascript-canvas:
le code suivant dessiner un hexagone. Changez le nombre de côtés pour créer différents polygones réguliers. méthode
// hexagon
var numberOfSides = 6,
size = 20,
Xcenter = 25,
Ycenter = 25;
cxt.beginPath();
cxt.moveTo (Xcenter + size * Math.cos(0), Ycenter + size * Math.sin(0));
for (var i = 1; i <= numberOfSides;i += 1) {
cxt.lineTo (Xcenter + size * Math.cos(i * 2 * Math.PI/numberOfSides), Ycenter + size * Math.sin(i * 2 * Math.PI/numberOfSides));
}
cxt.strokeStyle = "#000000";
cxt.lineWidth = 1;
cxt.stroke();
était super, très élégant, aussi, si vous ajoutez: 'cxt.save();' ' cxt.fillStyle = "# FF000",' ' cxt.fill();' ' cxt.restore ( Vous pouvez remplir la forme. – samuelkobe
c'est génial - j'ai été assis à jouer avec, mais je ne sais pas comment je ferais pivoter le polygone choisi - des idées? – eskimomatt
Il y a plusieurs façons d'obtenir ce que vous voulez. Une option consiste à utiliser la méthode intégrée cxt.rotate() [avec cxt.save() et cxt.restore()] pour faire pivoter des parties de la toile. Alternativement, l'ajout d'une valeur cohérente aux fonctions cos et sin fonctionnera également. Voir ce jsfiddle pour une démonstration: http://jsfiddle.net/kwyhn3ba/ –
Vous pouvez utiliser le lineTo() même que: var = objctx canvas.getContext ('2d');
objctx.beginPath();
objctx.moveTo(75, 50);
objctx.lineTo(175, 50);
objctx.lineTo(200, 75);
objctx.lineTo(175, 100);
objctx.lineTo(75, 100);
objctx.lineTo(50, 75);
objctx.closePath();
objctx.fillStyle = "rgb(200,0,0)";
objctx.fill();
si vous voulez ne pas remplir le polygone utiliser la méthode course() au lieu de remplissage()
Vous pouvez également vérifier les points suivants: http://www.authorcode.com/draw-and-fill-a-polygon-and-triangle-in-html5/
grâce
//create and fill polygon
CanvasRenderingContext2D.prototype.fillPolygon = function (pointsArray, fillColor, strokeColor) {
if (pointsArray.length <= 0) return;
this.moveTo(pointsArray[0][0], pointsArray[0][1]);
for (var i = 0; i < pointsArray.length; i++) {
this.lineTo(pointsArray[i][0], pointsArray[i][1]);
}
if (strokeColor != null && strokeColor != undefined)
this.strokeStyle = strokeColor;
if (fillColor != null && fillColor != undefined) {
this.fillStyle = fillColor;
this.fill();
}
}
//And you can use this method as
var polygonPoints = [[10,100],[20,75],[50,100],[100,100],[10,100]];
context.fillPolygon(polygonPoints, '#F00','#000');
Voici une fonction qui prend même en charge le dessin dans le sens horaire/anti-horaire que vous contrôlez avec la règle d'enroulement non nulle.
Here is a full article on how it works and more.
// Defines a path for any regular polygon with the specified number of sides and radius,
// centered on the provide x and y coordinates.
// optional parameters: startAngle and anticlockwise
function polygon(ctx, x, y, radius, sides, startAngle, anticlockwise) {
if (sides < 3) return;
var a = (Math.PI * 2)/sides;
a = anticlockwise?-a:a;
ctx.save();
ctx.translate(x,y);
ctx.rotate(startAngle);
ctx.moveTo(radius,0);
for (var i = 1; i < sides; i++) {
ctx.lineTo(radius*Math.cos(a*i),radius*Math.sin(a*i));
}
ctx.closePath();
ctx.restore();
}
// Example using the function.
// Define a path in the shape of a pentagon and then fill and stroke it.
context.beginPath();
polygon(context,125,125,100,5,-Math.PI/2);
context.fillStyle="rgba(227,11,93,0.75)";
context.fill();
context.stroke();
Cet article est assez long à dire "votre dessin d'un cercle avec moins de bords". Vous pourriez vouloir mettre en cache les résultats pour éviter d'appeler cos et sin tellement (pardonnez-moi si c'est déjà fait, je ne suis pas un programmeur JavaScript). – QuantumKarl
En plus de @canvastag, utilisez une boucle while
avec shift
je pense est plus concis:
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var poly = [5, 5, 100, 50, 50, 100, 10, 90];
// copy array
var shape = poly.slice(0);
ctx.fillStyle = '#f00'
ctx.beginPath();
ctx.moveTo(shape.shift(), shape.shift());
while(shape.length) {
ctx.lineTo(shape.shift(), shape.shift());
}
ctx.closePath();
ctx.fill();
Pour faire un hexagone simple, sans la nécessité d'une boucle, Just utilisez la fonction beginPath(). Assurez-vous que votre canvas.getContext ('2d') est l'équivalent de ctx sinon il ne fonctionnera pas. J'aime aussi ajouter une variable appelée temps que je peux utiliser pour mettre à l'échelle l'objet si nécessaire. Ce que je n'ai pas besoin de changer chaque nombre.
// Times Variable
var times = 1;
// Create a shape
ctx.beginPath();
ctx.moveTo(99*times, 0*times);
ctx.lineTo(99*times, 0*times);
ctx.lineTo(198*times, 50*times);
ctx.lineTo(198*times, 148*times);
ctx.lineTo(99*times, 198*times);
ctx.lineTo(99*times, 198*times);
ctx.lineTo(1*times, 148*times);
ctx.lineTo(1*times,57*times);
ctx.closePath();
ctx.clip();
ctx.stroke();
- 1. Dessiner des images sur le canevas HTML5
- 2. Comment dessiner un segment d'un donut avec un canevas HTML5?
- 3. Polygones dans un canevas javascript
- 4. Comment dessiner un chemin partiellement dans le canevas de HTML5?
- 5. Dessiner sur un canevas enfant
- 6. dessiner des polygones sur google map v2
- 7. Dessiner une flèche sur le canevas HTML5 entre deux objets
- 8. Microsoft Blend - dessiner des polygones
- 9. Comment dessiner des polygones pivotés dans SDL2
- 10. Comment puis-je dessiner des polygones sur une toile HTML5 grâce à une fonction JavaScript
- 11. Comment dessiner des polygones transparents avec Python?
- 12. Comment dessiner moniteur ECG dans le canevas en utilisant HTML5?
- 13. Dessiner une ligne 2D sur un canevas
- 14. Une fonction réutilisable pour couper des images en polygones à l'aide de canevas html5
- 15. Comment dessiner un fichier bitmap sur un canevas en html?
- 16. bibliothèque de canevas pour dessiner des images
- 17. Importer une image sur un canevas html5
- 18. Android dessiner bitmap sur les polygones
- 19. Dessiner des polygones plus efficacement avec matplotlib
- 20. Un problème de canevas HTML5
- 21. dessiner un canevas 3D rectangle
- 22. Défilement horizontal sur le canevas. HTML5
- 23. Comment puis-je dessiner efficacement plusieurs pixels sur un canevas?
- 24. Polygone redimensionnable de canevas HTML5
- 25. Dessin d'une image sur le canevas html5
- 26. Comment sauvegarder l'image de l'iframe sous un canevas HTML5?
- 27. google maps API v3 - comment dessiner des polygones/polylignes dynamiques?
- 28. Masque pour putImageData avec un canevas HTML5?
- 29. Dessiner des polygones avec un ventilateur triangulaire dans OpenGLES
- 30. html5 dessin de canevas/enregistrement
Il est bon de se rappeler que tout ce qui peut être fait sans une bibliothèque tierce devrait normalement être fait. – Rodrigo