Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Canvas javascript : Disegnare figure regolari
Roberto
Roberto

Posted on • Edited on

     

Canvas javascript : Disegnare figure regolari

Vediamo come disegnare delle figure geometriche nel canvas con il tool di funzioni che ci mette a disposizione il metodogetContext.

Per prima cosa prepariamo il canvas, ho scritto un post:Canvas javascript : Un potente strumento per la grafica sul web, dove scrivo un po' più approfonditamente: cos'è il canvas, quando si usa e come inizializzarlo, quindi non mi dilungherò su questo punto.

letcanvas=document.getElementById('myCanvas');canvas.width=600;canvas.height=400;letctx=canvas.getContext('2d');
Enter fullscreen modeExit fullscreen mode

Ma prima di iniziare a disegnare a schermovediamo come funziona la griglia così sarà più facile comprendere le dinamiche.

GRIGLIA

Il canvas è una griglia di pixel sviluppata su un piano cartesiano che parte dal punto di origine O e si sviluppa sull’asse delle X in larghezza e sull’asse delle Y in lunghezza.

Alt Text

Grazie alle coordinate della griglia possiamoposizionare degli oggetti bidimensionali nello spazio.

Nella figura sottostante ho posizionato un quadrato di 40X40 pixel nelle coordinate x:50 e y:40 rispetto al punto di origine 0, che ha coordinate x:0, y:0.

Le coordinate vengono calcolate dal vertice in alto a sinistra.

Alt Text

Nel programma sottostante fatto dacasiimir, al passaggio del mouse si possono vedere, dinamicamente, le coordinate in una griglia 400x400.

RETTANGOLO

Per visualizzare dei rettangoli ci sono tre funzioni:

  • fillRect(x, y, width, height)Che disegna unrettangolo pieno
  • strokeRect(x, y, width, height)Che disegnail bordo di un rettangolo
  • clearRect(x, y, width, height)Checancella una porzione di forma rettagolare

Tutte e 3 queste funzioni prendo come attributi, le coordinate per posizionarlo sul canvas (x, y) e le dimensioni, larghezza e altezza (width, height).

ctx.fillRect(50,50,100,100);ctx.strokeRect(200,50,100,100);ctx.fillRect(350,50,100,100);ctx.clearRect(350,50,50,50);
Enter fullscreen modeExit fullscreen mode

ConfillRect abbiamo disegnato un quadrato 100x100px e lo abbiamo posizionato al 50esimo px della griglia sia in altezza che in larghezza, poi confillRect abbiamo disegnato di fianco al primo una cornice quadrata della stessa dimensione.
Per far vedere come funzionaclearRect abbiamo creato un quadrato uguale al primo e nella stessa posizione abbiamo cancellato un rettangolo di 50px per lato.

Questo è il risultato

Così monocromantici non sono molto allegri, ma per lo stile ho deciso che creerò un post dedicato, anche perchè c'è ne da dire anche su questo argomento e non volevo fare un papiro.

PATH

Per disegnare tutte la altre figure che non siano rettangoli, dobbiamo conoscere la funzionebeginPath(), chetiene traccia dei punti della figura geometrica che andremo creare.

Per capire meglio ilbeginPath disegnamo un linea retta.

Linea

Con questo script creeremo una linea retta di due punti.

ctx.beginPath();ctx.moveTo(50,100);ctx.lineTo(300,100);ctx.stroke();
Enter fullscreen modeExit fullscreen mode
  • ConbeginPath()creiamo un nuovopercorso di coordinate.
  • moveTocrea un punto senza che questo venga tracciato.
  • lineTocrea un punto che si traccerà con una linea che parte dal punto precedente e arriva nella coordinate passate come argomento.
  • strokedisegna le linee unendo i punti salvati nel path, senza questa funzione non verrebbe renderizzato nulla a schermo.

Linea tratteggiata

In questo path alterniamomoveTo conlineTo per creare una linea tratteggiata.

ctx.beginPath();ctx.moveTo(50,150);ctx.lineTo(100,150);ctx.moveTo(150,150);ctx.lineTo(200,150);ctx.moveTo(250,150);ctx.lineTo(300,150);ctx.stroke();
Enter fullscreen modeExit fullscreen mode

Nella linea tratteggiata si vede megliol'utilità del moveTo che si sposta sulla griglia senza essere tracciata.

Linea frastagliata

ctx.beginPath();ctx.moveTo(50,275);ctx.lineTo(100,200);ctx.lineTo(200,270);ctx.lineTo(300,210);ctx.stroke();
Enter fullscreen modeExit fullscreen mode

Per creare una linea frastagliata bisogna creare vari punti sul canvas e poi collegarli.

Questo è il risultato

FIGURE GEOMETRICHE PIANE

Una volta imparato il funzionamento delle linee,le figure piane non sono altro un serie di linee... chiuse.

Ad esempio se volessimofare un triangolo non dobbiamo fare altro checreare 3 punti, in cuil'ultimo punto deve avere le coordinate del primo punto, nel nostro caso ilmoveTo.

ctx.beginPath();ctx.moveTo(50,50);ctx.lineTo(200,50);ctx.lineTo(200,150);ctx.lineTo(50,50);ctx.stroke();
Enter fullscreen modeExit fullscreen mode

Un'altra opzione per chiudere una figura piana è sostituire l'ultimo punto, quello che torna alla coordinata iniziale, con la funzioneclosePath che chiude il percorso e la figura creata automaticamente.

ctx.beginPath();ctx.moveTo(50,50);ctx.lineTo(200,50);ctx.lineTo(200,150);ctx.closePath()ctx.stroke();
Enter fullscreen modeExit fullscreen mode

Con questi codici abbiamo stampato a video ilperimetro di un triangolo, perchè la funzionestrokeunisce i vari punti con delle linee. Se volessimoavere delle figure piene non dovremmo dare altro che sostituirestroke *con la funzione *ctx.fill().
Ecco degli esempi di figure geometriche.

CONCLUSIONE

In questo abbiamo appreso come disegnare sul canvas delle figure geometriche regolari.
Nel prossimo post "Disegnare figure geometriche con le curve" andremo a conoscere anche le figure con curve, tra cui il cerchio.

Se avete dei consigli, suggerimenti o critiche costruttive lasciatemi un commento qui sotto oppure contattatemi trammite i miei social.

Top comments(5)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss
CollapseExpand
 
casiimir profile image
casiimir
Front-End Developer
  • Location
    Sicily, Italy
  • Education
    Philosophical Sciences
  • Work
    Master's degree at University of Palermo
  • Joined

Ottima guida, complimenti davvero Roberto.
Non saprei cosa consigliare... pensandoci ho un repo di una griglia in canvas che ho utilizzato in passato (il codice è un po sporco, ero agli inizi) ma l'idea è carina e molto utile, dacci un'occhiata e fammi sapere!

Buone feste!

casiimir.github.io/all-the-stuff/c...
repo:github.com/casiimir/all-the-stuff/...

CollapseExpand
 
camizzilla profile image
Roberto
I'm canvas Javascript lover. My passion: Adventure graphic, old game and food
  • Location
    Cremona
  • Work
    FrontEnd Developer
  • Joined

Ciao, ho dato un occhio alla tua griglia e l'ho trovata interessate, nonostante si vede che è un lavoro alle prime armi. ;-) . Se tu sei d'accordo, mi piacerebbe usarla per il mio post, perchè spiega bene come funziona la griglia. Possola usarla citandoti?

CollapseExpand
 
casiimir profile image
casiimir
Front-End Developer
  • Location
    Sicily, Italy
  • Education
    Philosophical Sciences
  • Work
    Master's degree at University of Palermo
  • Joined

Ma certamente, Inseriscilo pure!

CollapseExpand
 
camizzilla profile image
Roberto
I'm canvas Javascript lover. My passion: Adventure graphic, old game and food
  • Location
    Cremona
  • Work
    FrontEnd Developer
  • Joined

Grazie mille, sono contento che ti piaccia.
Andrò sicuramente a dare un occhiata al tuo repository e ti farò sapere.

CollapseExpand
 
valix85 profile image
Valerio
  • Joined

Bellissima guida ;)

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

I'm canvas Javascript lover. My passion: Adventure graphic, old game and food
  • Location
    Cremona
  • Work
    FrontEnd Developer
  • Joined

More fromRoberto

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp