mgr inż. Wacław Libront * Bobowa 2017-2019
ZSO Bobowa, ul. Długoszowskich 1, 38-350 Bobowa, tel: 0183514009, fax: 0183530221, email: sekretariat@zsobobowa.eu, www: zsobobowa.eu
Obrotowy
kwadrat
Jak narysować pochylony prostokąt (kwadrat)? Wykorzystamy nieco
zmodyfikowaną (w stosunku do poprzedniej lekcji) funkcję ODCINEK, która umie rysować linie pod dowolnym kątem
i w kolorze kol. Kąt liczony jest przeciwnie do ruchu wskazówek zegara.
Funkcja KWA(x,y,bok,kat,kol) rysuje kwadrat o początku w punkcie x i y w lewym dolnym rogu, kwadrat o boku bok i kolorze kol jest pochylony o kąt kat przeciwnie do ruchu wskazówek zegara.
<canvas width="400" height="400" id="can"> </canvas> <script> var c = can.getContext("2d"); function ODCINEK(x,y,bok,kat,kol){ var x1=x+bok*Math.cos(kat*Math.PI/180); var y1=y-bok*Math.sin(kat*Math.PI/180); c.strokeStyle=kol; c.beginPath(); c.moveTo(x,y); c.lineTo(x1,y1); c.stroke(); return {x1,y1}; } function KWA(x,y,bok,kat,kol){ var p=ODCINEK(x,y,bok,kat-90,kol); p= ODCINEK(p.x1,p.y1,bok,kat,kol); p= ODCINEK(p.x1,p.y1,bok,kat+90,kol); ODCINEK(p.x1,p.y1,bok,kat+180,kol); } //kwadratowa serwetka for (var k=0;k<360;k=k+5){ KWA(300,300,100,k,'blue'); } </script> |
Pętla for tworzy kąty od 0 do 360, co 5 stopni i rysowane są identyczne kwadraty, obrócone wokół jednego rogu. Obszar canvas został powiększony 400x400 pikseli.
Kolejna pętla przesuwa obrócone o 45 stopni kwadraty w prawo
//przesunięte kwadraty for (var i=0;i<10;i++){ KWA(10+i*20,80,100,45,'red'); } |
Obrót wokół środka
Jak narysować kwadrat tak, aby jego początek znajdował się w środku? Należy przesunąć początek o połowę przekątnej pod kątem 135 stopni, a następnie posłużyć się funkcją KWAS.
Z pomocą nowej funkcji możemy narysować wiatrak składający się z odcinków, na końcach których znajdują się kwadraty. Funkcja KWAS korzysta z funkcji ODCINEK.
function KWAS(xs,ys,bok,kat,kol){ //przekatna var k=kat+135; var b=bok*Math.sqrt(2)/2; var x1=xs+b*Math.cos(k*Math.PI/180); var y1=ys-b*Math.sin(k*Math.PI/180); c.moveTo(x1,y1); //kwadrat var p=ODCINEK(x1,y1,bok,kat-90,kol); p= ODCINEK(p.x1,p.y1,bok,kat,kol); p= ODCINEK(p.x1,p.y1,bok,kat+90,kol); ODCINEK(p.x1,p.y1,bok,kat+180,kol); } //wiatraczek for (var k=0;k<360;k=k+15){ var p=ODCINEK(150,150,100,k,'red'); KWAS(p.x1,p.y1,20,k,'blue'); } |
Gwiazdy
Kolejną
geometryczną figurą jest romb, za pomocą którego będziemy mogli rysować dowolne
symetryczne gwiazdy.
function ROMB(x,y,bok,katw,kat,kol){ var p; p=ODCINEK(x,y,bok,kat+katw,kol); p=ODCINEK(p.x1,p.y1,bok,kat,kol); p=ODCINEK(p.x1,p.y1,-bok,kat+katw,kol); p=ODCINEK(p.x1,p.y1,-bok,kat,kol); } function GWIAZDA(x,y,bok,kat,ile,kol){ var katw=360/ile; for (var i=0;i<ile;i++) ROMB(x,y,bok,katw,katw*i,kol); } |
Szablon
<canvas width="400" height="400" id="can"></canvas> <script> var c = can.getContext("2d"); </script> |