Jun 03

Regelmäßige Vielecke mit Canvas

Tag: CanvasPatrick @ 11:00 pm

In letzter Zeit habe ich mich verstärkt wieder mal mit Canvas beschäftigt. Dabei ging es mir vor allem um regelmäßige Vielecke (englisch: regular polygons).

Von Haus bietet Canvas in keiner Implementierung eine Funktion zum schnellen und einfachen Erzeugen von regelmäßigen Vielecken. Daher setzte ich mich hin und programmierte angeregt durch canvas.quaese.de zwei entsprechenende canvas-Objekterweiterungen.

Außerdem wollte ich gern gezackte Figuren wie Sterne und Sonnen mit einem Funktionsaufruf erzeugen können. Also nahm ich meinen bisherigen Code her und überarbeitete ihn.

Das Ergebnis all des Codens kann sich meines Erachtens sehen lassen. Vor allem bei Mehrfachaufrufen ergeben sich sehr schicke Muster.

Die Methoden selbst sind nach einem simplen Prinzip aufgebaut. Man gibt die Position des Vieleckmittelpunktes, die Anzahl der Ecken, den Radius (Mittelpunkt->Ecke) und Anfangswinkel (meist 0) an.

Den Quelltext der Objekterweitungen kann ich nachfolgend sehen:

canvas.drawPoly = function(x,y,n,r,phi) {
this.translate(x,y);
this.rotate(phi);
this.beginPath();
this.moveTo(0,r);

for( var i=0; i<=n; i++){
this.save();
this.rotate(2*i*Math.PI/n);
this.lineTo(0,r);
this.restore();
}
this.stroke();
this.rotate(-phi);
this.translate(-x,-y);
}

canvas.fillPoly = function(x,y,n,r,phi) {
this.translate(x,y);
this.rotate(phi);
this.beginPath();
this.moveTo(0,r);

for( var i=0; i<=n; i++){
this.save();
this.rotate(2*i*Math.PI/n);
this.lineTo(0,r);
this.restore();
}
this.fill();
this.rotate(-phi);
this.translate(-x,-y);
}

canvas.drawZickzack = function(x,y,n,r1,r2,phi) {
this.translate(x,y);
this.rotate(phi);
this.beginPath();
this.moveTo(0,r1);

for( var i=0; i<=n; i++){
this.save();
this.rotate(2*i*Math.PI/n);
this.lineTo(0,r1);
this.restore();
this.save();
this.rotate(2*i*Math.PI/n+(2*Math.PI/n)/2);
this.lineTo(0,r2);
this.restore();
}

this.stroke();
this.rotate(-phi);
this.translate(-x,-y);
}

canvas.fillZickzack = function(x,y,n,r1,r2,phi) {
this.translate(x,y);
this.rotate(phi);
this.beginPath();
this.moveTo(0,r1);

for( var i=0; i<=n; i++){
this.save();
this.rotate(2*i*Math.PI/n);
this.lineTo(0,r1);
this.restore();
this.save();
this.rotate(2*i*Math.PI/n+(2*Math.PI/n)/2);
this.lineTo(0,r2);
this.restore();
}

this.fill();
this.rotate(-phi);
this.translate(-x,-y);
}

// Anwendungsbeispiel:
canvas.fillStyle = "#009";
canvas.strokeStyle = "rgb(0,0,0)";
canvas.lineWidth = 2;
// Sechseck
canvas.drawPoly(60,60,6,40,0);

Im Grundlagenbeitrag zu Canvas kann man sich genauere Informationen zum Einbau holen. Auch ein Blick in den Quellcode meiner angefertigen Demo hilft sich dem ein oder anderen und zeigt die Möglichkeiten der Methoden auf.

Vielecke und gezackte Muster mit Canvas

Eine Antwort zu “Regelmäßige Vielecke mit Canvas”

  1. Quaese sagt:

    Sehr interessanter Artikel, der mich ebenfalls zum Erstellen eines eigenen Polygonscripts inspiriert hat.

    Zu deinen Methoden möchte in anmerken, dass du diese performanter gestalten könntest, indem du den Zustand des Kontextes nicht in jedem Schleifendurchlauf sichern und wiederherstellen würdest. Es reicht ja aus, dies am Anfang und am Ende der Routine zu tun.

    —– [CODE] —–
    fillPoly = function(x,y,n,r,phi) {
    objContext.save();

    objContext.translate(x,y);
    objContext.rotate(phi);

    objContext.beginPath();
    objContext.moveTo(0,r);

    for( var i=0; i<=n; i++){
    objContext.rotate(2*Math.PI/n);
    objContext.lineTo(0,r);
    }

    objContext.restore();
    objContext.fill();
    }
    —– [/CODE] —–

    Ciao
    Quaese

  2. buy chloroquine sagt:

    chloroquine covid19

    n coronavirus china – chloroquine phosphate online – chloroquine phosphate

  3. levitra 20 mg sagt:

    levitra online

    buy levitra 20mg online no prescription needed us licensed – levitra levitra levitra vs vs – levitra 20mg review register

  4. cbd oil for sale amazon sagt:

    cbd oil

    cbd stands for – cbd spray – cbd tablets

  5. viagra for sale sagt:

    viagra for sale

    viagra 5 mg online profile – viagra and alcohol forum total posts – cialas

  6. pure cbd oil sagt:

    hemp oil vs cbd oil

    cbd oil for pain for sale – cbd in urine – cbd in vape

  7. chloroquine phosphate 250 mg sagt:

    chloroquine sars

    3 coronavirus cases in us – aralen chloroquine – coronavirus lockdown

  8. cialis generic sagt:

    cialis vs viagra

    powered by drupal cialis – cialis effect – cialis how much to take

  9. cialis side effects sagt:

    cialis generic

    cialis use – cialis information yim – cialis manufacturer

  10. cost of tadalafil generic at walgreens sagt:

    tadalafil 5mg

    cialis from canada online pharmacy topics by – cialis and alcohol consumption sort by – cialis 10mg or 20mg interests

  11. tadalafil online 20mg sagt:

    generic tadalafil

    acquisto cialis generico italia – cialis generic cheap version 3.8.7 – cialis more:for_patients

  12. canadian viagra 100mg south africa sagt:

    canadian viagra 100mg south africa

    canadian viagra 100mg south africa

  13. cialis plans to go otc sagt:

    cialis plans to go otc

    cialis plans to go otc

  14. buy viagra worldwide sagt:

    buy viagra worldwide

    buy viagra worldwide

  15. alternatives to levitra sagt:

    alternatives to levitra

    alternatives to levitra

  16. tadalafil canada cost sagt:

    tadalafil canada cost

    tadalafil canada cost

  17. otc female viagra pill sagt:

    otc female viagra pill

    otc female viagra pill

  18. amoxicillin and breastfeeding sagt:

    amoxicillin and breastfeeding

    amoxicillin and breastfeeding

  19. half life of amoxicillin sagt:

    half life of amoxicillin

    half life of amoxicillin

  20. azithromycin with alcohol sagt:

    azithromycin with alcohol

    azithromycin with alcohol

  21. celebrex alternative sagt:

    celebrex alternative

    celebrex alternative

  22. celebrex heart sagt:

    celebrex heart

    celebrex heart

  23. ic cephalexin 500mg sagt:

    ic cephalexin 500mg

    ic cephalexin 500mg

  24. keflex 500mg cap sagt:

    keflex 500mg cap

    keflex 500mg cap

  25. abilify and cymbalta sagt:

    abilify and cymbalta

    abilify and cymbalta

  26. duloxetine hcl 60mg beads sagt:

    duloxetine hcl 60mg beads

    duloxetine hcl 60mg beads

  27. generic viagra 100mg for sale sagt:

    generic viagra 100mg for sale

    generic viagra 100mg for sale

  28. viagra 20 mg cost sagt:

    viagra 20 mg cost

    viagra 20 mg cost

  29. cialis strength australia sagt:

    cialis strength australia

    cialis strength australia

  30. cialis drug sagt:

    cialis drug

    cialis drug

  31. cialis 80mg sagt:

    cialis 80mg

    cialis 80mg

  32. indications of ciprofloxacin sagt:

    indications of ciprofloxacin

    indications of ciprofloxacin

  33. cialis without prescription sagt:

    cialis without prescription

    cialis without prescription

  34. cialis on line sagt:

    cialis on line

    cialis on line

  35. tadalafil 30mg tablet sagt:

    tadalafil 30mg tablet

    tadalafil 30mg tablet

  36. cialis review sagt:

    cialis review

    cialis review

  37. cialis for sell sagt:

    cialis for sell

    cialis for sell

  38. viagra and dapoxetine sagt:

    viagra and dapoxetine

    viagra and dapoxetine

  39. 200 mg sildenafil sagt:

    200 mg sildenafil

    200 mg sildenafil

  40. viagra connect usa sagt:

    viagra connect usa

    viagra connect usa

  41. cialis overnight shipping sagt:

    cialis overnight shipping

    cialis overnight shipping

  42. cialis from australia sagt:

    cialis from australia

    cialis from australia

  43. real viagra 100mg sagt:

    real viagra 100mg

    real viagra 100mg

Hinterlasse einen Kommentar

You must be logged in to post a comment.