A rotate() elforgatási metódusnál kell meghatározni, elforgatási fok nagyságát.
A rotate elforgatási fok gyakorlati meghatározásához, a Math.PI /180 értéket szorozzuk, az elforgatáshoz szükséges fok nagyságával.
Példa rotate 45-fokos elforgatásra: rotate(45*Math.PI /180);
A rotate elforgatási fok meghatározását követő alakzatok, a meghatározott rotate értéknek megfelelően, elfordulnak.
A rotate() metódussal elforgatott alakzatot vagy alakzatokat követő rajzok, ne forduljanak el, vissza kell állítani a
rotate értéket: rotate(-45*Math.PI /180);
Az óra forgásával megegyező, 45-fokos rotate elforgatást meghatározhatjuk:
Így: rotate(45*Math.PI /180); vagy így: rotate(Math.PI / 4); Mindkettő értéke = 0.7853981633974483;
Az óra forgásával megegyező, 90-fokos rotate elforgatást meghatározhatjuk:
Így: rotate(90*Math.PI /180); vagy így: rotate(Math.PI / 2); Mindkettő értéke = 1.5707963267948966;
A canvas, azaz, rajzvászon elhelyezkedése, mindig a 0-pozíciótól vízszintesen jobbra, és függőlegesen lefelé van, még akkor is, ha a rotate() metódussal elforgatjuk a rajzolt alakzatunkat, és koordinátatengelyeket.
A rotate elforgatást követően, a koordináta értékeket meghatározó left-y és top-x is, más pozícióba kerül.
A canvas és koordinátatengelyek alapértelmezett megjelenése. A canvas területén, elhelyezünk egy 60x60-as piros négyszöget, left y=0 és top x=0 pozícióban. fillStyle = 'red'; fillRect(0, 0, 60, 60);
Piros alakzat teljes méretében látható. Koordinátatengelyek is, alaphelyzetben vannak. Alakzat mozgatásakor: fillRect(y, x, 60, 60); y = pozitív érték, jobbra mozgat. y = negatív érték, balra mozgat. x = pozitív érték, lefelé mozgat. x = negatív érték, felfelé mozgat. |
Elforgatást 45-fokban határozzuk meg. rotate(Math.PI / 4); fillStyle = 'red'; fillRect(0, 0, 60, 60);
Piros alakzat azon része látható, mely a canvas területén van. Koordinátatengelyek is, elfordultak 45-fokkal. Ezért az alakzat mozgatásakor: fillRect(y, x, 60, 60); y = pozitív érték, jobbra-le mozgat. y = negatív érték, balra-fel mozgat. x = pozitív érték, balra-le mozgat. x = negatív érték, jobbra-fel mozgat. Rotate 45-fokkal elforgatott, 0-0 pozícióban lévő 60x60-as alakzat teljesen látható legyen, a következő pozíciót kell meghatározni: fillRect(30, -30, 60, 60); |
Elforgatást 90-fokban határozzuk meg. rotate(Math.PI / 2); fillStyle = 'red'; fillRect(0, 0, 60, 60);
Piros alakzat nem látható, mert a canvas területén kívül van. Koordinátatengelyek is, elfordultak 90-fokkal. Ezért az alakzat mozgatásakor: fillRect(y, x, 60, 60); y = pozitív érték, lefelé mozgat. y = negatív érték, felfelé mozgat. x = pozitív érték, balra mozgat. x = negatív érték, jobbra mozgat. Rotate 90-fokkal elforgatott, 0-0 pozícióban lévő 60x60-as alakzat teljesen látható legyen, a következő pozíciót kell meghatározni: fillRect(0, -60, 60, 60); |
A canvas rajzvászon területe width=300px; height=300px; sárga színnel jelölve látható.
Alaphelyzetben a rotate, azaz, forgatási pont, a 0-0 pozícióban van.
Elhelyezünk 3 alakzatot zöld színnel, melyek mérete 60x60 px.
Elsőt a 0-0 pozícióba. fillRect(0, 0, 60, 60);
Másodikat a 100-0 pozícióba. fillRect(100, 0, 60, 60);
Harmadikat a 200-0 pozícióba. fillRect(200, 0, 60, 60);
Mi történik alakzatokkal, rotate 45-fokos elforgatáskor?
Rotate, azaz elforgatott alakzatok, világoszöld színben láthatók.
A rotate elfogatáskor, nem csak az alakzatok, hanem a left-y és top-x koordinátatengelyek is, elfordulnak.
Mivel a koordinátaértéket meghatározó left-y és top-x is elfordultak 45-fokkal, ezért az y és x értékeket is, másként kell alkalmazni elforgatott alakzat további mozgatásakor.
y = pozitív érték, alakzatot 45-fokban jobbra-le mozgatja.
y = negatív érték, alakzatot 45-fokban balra-fel mozgatja.
x = pozitív érték, alakzatot 135-fokban balra-le mozgatja.
x = negatív érték, alakzatot 135-fokban jobbra-fel mozgatja.
Újbóli megtekintéshez, kattintsunk a böngésző frissítésre, vagy nyomjuk le az F5 billentyűt.
Ne feledjük, strokeRect(y, x, 100, 100):
Az y és x koordináta értékek vonala is elfordul.
Az y tengelyvonal = Alakzat felsőoldalának meghosszabbított vonalával.
Az x tengelyvonal = Alakzat baloldalának meghosszabbított vonalával.
Alakzat rotate forgatása, +1 fokonként. rotate(1*Math.PI/180); Kezdő pozíció és alakzat méretei: lineWidth = 2; strokeStyle = 'red'; strokeRect(100, 0, 100, 100); |
Alakzat rotate forgatása, -1 fokonként. rotate(-1*Math.PI/180); Kezdő pozíció és alakzat méretei: lineWidth = 2; strokeStyle = 'red'; strokeRect(0,100, 100, 100); |
Négyszög start sarokpontja körül. |
Négyszög jobb felső sarokpontja körül. |
Négyszög központjában. |
Forgatás, tetszőleges négyszögmérettnél, a négyszög központjában.
Központi érték meghatározza:
Mátrix transzformáció, valamint törlő kör és központját jelölő pozíciót.
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
</head>
<body>
<button id="btnrota">Katt ide, többször is!</button><br><br>
<canvas id="KozpontiRota" width="300" height="300"></canvas>
<script language="JavaScript" type="text/javascript" src="kozpontirota.js"> </script>
</body>
kozpontirota.js tartalma:
$(document).ready(function(){
// Általunk meghatározott adatok: -----------------------------------------------------------
var RectL=80; // Négyszög start Left értéke.
var RectT=80; // Négyszög start Top értéke.
var Nszw=100; // Négyszög szélesség meghatározása.
var Nszh=50; // Négyszög magasság meghatározása.
var rfok=11.25; // Elforgatási fok, értéke.
// További adatokat, a program határozza meg: ------------------------------------------------
var kpLeft= (Nszw/2)+RectL; // Központ left érték meghatározása.
var kpTop = (Nszh/2)+RectT; // Központ top érték meghatározása.
var cvid = document.getElementById('KozpontiRota'); // Canvas id.
var rtn = cvid.getContext('2d');
// Fix, azaz, start négyszög szemléltető.
rtn.fillStyle = 'red'; rtn.fillRect(RectL, RectT, Nszw, Nszh);
rtn.arc(kpLeft,kpTop,3,0,2*Math.PI); rtn.fillStyle = "blue"; rtn.fill();
$(" #btnrota").click( function(){
rtn.clearRect(RectL-2, RectT-2, Nszw+4, Nszh+4); // Töröljük az előző rajzot.
// Négyszög forgatása. -------------------------------
rtn.beginPath();
// Mátrix transzformáció.
rtn.translate(kpLeft, kpTop); rtn.rotate(rfok*Math.PI/180); rtn.translate(-kpLeft, -kpTop);
// Elforgatott téglalap.
rtn.fillStyle = 'red'; rtn.fillRect(RectL, RectT, Nszw, Nszh);
rtn.closePath();
// ----------------------------------------------
// Forgás központjának jelölése. ---------------------------
rtn.beginPath();
rtn.arc(kpLeft,kpTop,3,0,2*Math.PI); rtn.fillStyle = "blue"; rtn.fill();
rtn.closePath();
});
});
A rotate() elforgatáshoz, mindenki a neki megfelelő formátumot alkalmazhatja.
<canvas id="rotatew3" width="150" height="150" style="border:1px solid blue;">
Az Ön böngészője, nem támogatja a HTML5 vászoncímkét.</canvas>
<script>
var id=document.getElementById("rotatew3");
var rajz=id.getContext("2d");
rajz.fillRect(50,20,100,50);
</script>
| |
<canvas id="rotatew31" width="150" height="150" style="border:1px solid blue;">
Az Ön böngészője, nem támogatja a HTML5 vászoncímkét.</canvas>
<script>
var id=document.getElementById("rotatew31");
var rajz=id.getContext("2d");
rajz.rotate(20*Math.PI/180);
rajz.fillRect(50,20,100,50);
</script>
| |
<canvas id="rotatew32" width="150" height="150" style="border:1px solid blue;">
Az Ön böngészője, nem támogatja a HTML5 vászoncímkét.</canvas>
<script>
var id=document.getElementById("rotatew32");
var rajz=id.getContext("2d");
rajz.rotate(-20*Math.PI/180);
rajz.fillRect(20,50,100,50);
</script>
|
<canvas id="Crotate" width="200" height="200"
style="border:2px solid blue;"></canvas>
<script>
var rv = document.getElementById('Crotate');
var rvf = rv.getContext('2d');
// Alakzat (Derékszögű négyszög) méretei, width / height.
var rectWidth = 100;
var rectHeight = 50;
// Rajzvászon közepének meghatározása, center-width és center-height.
var Cw = rv.width/2;
var Ch = rv.height/2
// Forgatási 0-0 pozíció, a vászon középpontjában legyen.
rvf.translate(Cw, Ch);
// rotate forgatás 45 fokkal, az óramutató járásával megegyező irányba.
rvf.rotate(Math.PI/4);
// Alakzat y-0 és x-0 pozíciója.
// A 0-érték helyére írjuk, alakzat új pozícióját, mely lehet - vagy + érték.
var Ay = (rectWidth/-2)-0;
var Ax = (rectHeight/-2)-0;
rvf.fillStyle = 'blue';
rvf.fillRect(Ay, Ax, rectWidth, rectHeight);
</script>
|
Alaphelyzetben, forgás középpontja mindig a canvasz rajzvászon bal felső sarka (0-0 pozíció).
Alakzat középpontjában történő rotate forgatási középpont meghatározásához, át kell helyeznie 0-0 pozíciót alakzat középpontjába, a translate() módszer segítségével.
0. Alaphelyzet.
<canvas id="alaphelyzet" width="210" height="210"> </canvas>
<script>
const crva = document.getElementById('alaphelyzet');
const rva = crva.getContext('2d');
// Nem forgatott téglalap.
rva.fillStyle = 'gray';
rva.fillRect(40, 80, 120, 40);
</script>
| Alaphelyzet. |
1. Rotate 45 fok, left y=0; és top x=0;
<canvas id="a45f" width="210" height="210"> </canvas>
<script>
const crv45f = document.getElementById('a45f');
const rv45 = crv45f.getContext('2d');
// Nem forgatott téglalap.
rv45.fillStyle = 'gray';
rv45.fillRect(40, 80, 120, 40);
// Elforgatás 45-fokkal, y=0 és x=0 pozícióból.
rv45.rotate(Math.PI / 4);
// Elforgatott téglalap.
rv45.fillStyle = 'red';
rv45.fillRect(40, 80, 120, 40);
</script>
|
1. rotate(Math.PI / 4); azaz, 45 fok. |
2. translate(100, 100); rotate 45 fok.
<canvas id="at45f" width="210" height="210"> </canvas>
<script>
const ct45f = document.getElementById('at45f');
const rvt45 = ct45f.getContext('2d');
// Nem forgatott téglalap.
rvt45.fillStyle = 'gray'; rvt45.fillRect(40, 80, 120, 40);
// Mátrix transzformáció.
rvt45.translate(100, 100);
rvt45.rotate(Math.PI / 4);
// Elforgatott téglalap.
rvt45.fillStyle = 'red';
rvt45.fillRect(40, 80, 120, 40);
<script>
|
2. translate(100, 100); rotate(Math.PI / 4); azaz, 45 fok. |
3. translate(100, 100); rotate 45 fok; translate(-100, -100);
<canvas id="at45ft" width="210" height="300"> </canvas>
<script>
const ct45ft = document.getElementById('at45ft');
const rvt45t = ct45ft.getContext('2d');
// Nem forgatott téglalap.
rvt45t.fillStyle = 'gray'; rvt45t.fillRect(40, 80, 120, 40);
// Mátrix transzformáció.
rvt45t.translate(100, 100);
rvt45t.rotate(Math.PI / 4);
rvt45t.translate(-100, -100);
// Elforgatott téglalap.
rvt45t.fillStyle = 'red'; rvt45t.fillRect(40, 80, 120, 40);
<script>
|
3. translate(100, 100); rotate(Math.PI / 4); azaz, 45 fok. translate(-100, -100); |
4. Forgatás 90-fokkal.
<canvas id="at90ft" width="210" height="220"> </canvas>
<script>
const ct90ft = document.getElementById('at90ft');
const rvt90t = ct90ft.getContext('2d');
// Nem forgatott téglalap.
rvt90t.fillStyle = 'gray'; rvt90t.fillRect(40, 80, 120, 40);
// Mátrix transzformáció.
rvt90t.translate(100, 100);
rvt90t.rotate(Math.PI / 2);
rvt90t.translate(-100, -100);
// Elforgatott téglalap.
rvt90t.fillStyle = 'red'; rvt90t.fillRect(40, 80, 120, 40);
</script>
| 4. Forgatás 90-fokkal. |
5. Forgatás 90-fokkal, tetszőleges pozícióba.
<canvas id="at90ft" width="210" height="220"> </canvas>
<script>
const ct90ft = document.getElementById('at90ft');
const rvt90t = ct90ft.getContext('2d');
// Nem forgatott téglalap.
rvt90t.fillStyle = 'gray'; rvt90t.fillRect(40, 80, 120, 40);
// Mátrix transzformáció.
rvt90t.translate(100, 100);
rvt90t.rotate(Math.PI / 2);
rvt90t.translate(-100, -100);
// Elforgatott téglalap mozgatása.
// Első érték függőleges elmozgás: mínusz esetén fel, plusz esetén le.
// Második érték vízszintes elmozgás: mínusz esetén jobbra, plusz esetén balra.
rvt90t.fillStyle = 'red'; rvt90t.fillRect(40+40, 80-80, 120, 40);
</script>
| 5. Forgatás 90-fokkal, tetszőleges pozícióba. |
Ne feledjük, rotate() forgatást követően:
Az y és x koordináta értékek vonala is elfordul.
Az y tengelyvonal = Alakzat felsőoldalának meghosszabbított vonalával.
Az x tengelyvonal = Alakzat baloldalának meghosszabbított vonalával.
A rotate() metódussal elforgatott alakzatot vagy alakzatokat követő rajzok, ne forduljanak el, y és x tengelyvonal alaphelyzetbe kerüljön, vissza kell állítani a
rotate értéket.
Példa előzőleg 45 fokos rotate elforgatást követően, így: rotate(-45*Math.PI /180);
Olyan derékszög, tetszőleges háromszög, négyszög, sokszög forgatására alkalmazhatjuk, melyek sarkait, egy körrel körberajzolhatjuk úgy, hogy a kör, az alakzat minden sarkát érinti.
Űrlapos szerkesztéshez, kattints ide!
Újbóli megtekintéshez, kattintsunk a böngésző frissítésre, vagy nyomjuk le az F5 billentyűt.
|
|