<!doctype html>
<html>
<head>
<title>Kalkulaator</title>
<script>
function Arvutaja(kihinimi){
this.algus=function(){
this.kiht=document.getElementById(kihinimi);
this.kiht.innerHTML=
"Raadius: <input type='text' id='kast1' /> "+
"<input type='button' value='Ringi pindala' "+
"onClick='a1.arvuta();' /> "+
"<div id='vastus'></div>";
this.kast=document.getElementById("kast1");
this.vastusekiht=document.getElementById("vastus");
}
this.arvuta=function(){
var r=parseFloat(this.kast.value);
this.vastusekiht.innerHTML=3.14*r*r;
}
this.algus();
}
var a1;
function lehealgus(){
a1=new Arvutaja("kiht1");
}
</script>
</head>
<body onload="lehealgus();">
<h1>Arvutamine</h1>
<div id="kiht1"></div>
</body>
</html>

<!doctype html>
<html>
<head>
<title>Kalkulaator</title>
<script>
function Arvutaja(kihinimi){
this.algus=function(){
this.kiht=document.getElementById(kihinimi);
window[kihinimi+"_kalkulaator"]=this;
this.kiht.innerHTML=
"Raadius: <input type='text' id='"+kihinimi+"_kast1' /> "+
"<input type='button' value='Ringi pindala' "+
"onClick='"+kihinimi+"_kalkulaator.arvuta();' /> "+
"<div id='"+kihinimi+"_vastus'></div>";
this.kast=document.getElementById(kihinimi+"_kast1");
this.vastusekiht=document.getElementById(kihinimi+"_vastus");
}
this.arvuta=function(){
var r=parseFloat(this.kast.value);
this.vastusekiht.innerHTML=3.14*r*r;
}
this.algus();
}
function lehealgus(){
new Arvutaja("kiht1");
new Arvutaja("kiht2");
}
</script>
</head>
<body onload="lehealgus();">
<h1>Arvutamine</h1>
<div id="kiht1"></div>
<div id="kiht2"></div>
</body>
</html>

<html>
<head>
<title>Kalkulaator</title>
<script>
function Arvutaja(kihinimi, kastitekst, nuputekst, koefitsient){
this.algus=function(){
this.kiht=document.getElementById(kihinimi);
window[kihinimi+"_kalkulaator"]=this;
this.kiht.innerHTML=
kastitekst+": <input type='text' id='"+kihinimi+"_kast1' /> "+
"<input type='button' value='"+nuputekst+"' onClick='"+kihinimi+"_kalkulaator.arvuta();' /> "+
"<span id='"+kihinimi+"_vastus'></span>";
this.kast=document.getElementById(kihinimi+"_kast1");
this.vastusekiht=document.getElementById(kihinimi+"_vastus");
this.koefitsient=koefitsient;
}
this.arvuta=function(){
this.vastusekiht.innerHTML=
(parseFloat(this.kast.value)*this.koefitsient).toFixed(2);
}
this.algus();
}
function lehealgus(){
new Arvutaja("kiht1", "Eurod", "Dollariteks", 1.3);
new Arvutaja("kiht2", "Tollid", "Sentimeetriteks", 2.54);
new Arvutaja("kiht3", "Letihind", "Käibemaks", 0.2/1.20);
}
</script>
<meta charset="UTF-8" />
</head>
<body onload="lehealgus();">
<h1>Arvutamine</h1>
<div id="kiht1"></div>
<div id="kiht2"></div>
<div id="kiht3"></div>
</body>
</html>

Lisa objekti kujundusse teine tekstiväli, kus saab määrata, millise koguse võrra olemasolevat väärtust kasvatatakse või kahandatakse
<!doctype html>
<html>
<head>
<title>Kalkulaator</title>
<script>
function Laohaldus(kihinimi, kogus){
this.algus=function(){
this.kiht=document.getElementById(kihinimi);
this.kogus=kogus;
window[kihinimi+"_ladu"]=this;
this.kiht.innerHTML=
"<input type='button' value='<' onClick='"+
kihinimi+"_ladu.v2iksemaks();' /> "+
"<input type='text' id='"+kihinimi+
"_vastus' style='width: 50px' disabled />"+
"<input type='number' id='"+kihinimi+
"_muutus' style='width: 50px' value='1' />"+
"<input type='button' value='>' onClick='"+kihinimi+
"_ladu.suuremaks();' /> ";
this.vastusekiht=document.getElementById(kihinimi+"_vastus");
this.muutusekast=document.getElementById(kihinimi+"_muutus");
this.kuva();
}
this.kuva=function(){
this.vastusekiht.value=this.kogus;
}
this.v2iksemaks=function(){
this.kogus-=parseInt(this.muutusekast.value);
this.kuva();
}
this.suuremaks=function(){
this.kogus+=parseInt(this.muutusekast.value);
this.kuva();
}
this.algus();
}
function lehealgus(){
new Laohaldus("kiht1", 100);
new Laohaldus("kiht2", 50);
}
</script>
</head>
<body onload="lehealgus();">
<h1>Arvutamine</h1>
<div id="kiht1"></div>
<div id="kiht2"></div>
</body>
</html>

Tekstivälja asemel saab muudetava suuruse valida rippmenüüst
<!doctype html>
<html>
<head>
<title>Kalkulaator</title>
<script>
function Laohaldus(kihinimi, kogus, muutused){
this.algus=function(){
this.kiht=document.getElementById(kihinimi);
this.kogus=kogus;
this.muutused=muutused;
window[kihinimi+"_ladu"]=this;
var rippmenyy="<select id='"+kihinimi+"_valik'>";
for(var i=0; i<muutused.length; i++){
rippmenyy+="<option>"+muutused[i]+"</option>";
}
rippmenyy+="</select>";
this.kiht.innerHTML=
"<input type='button' value='<' onClick='"+
kihinimi+"_ladu.v2iksemaks();' /> "+
"<input type='text' id='"+kihinimi+"_vastus' style='width: 50px' disabled />"+
rippmenyy+
"<input type='button' value='>' onClick='"+kihinimi+"_ladu.suuremaks();' /> ";
this.vastusekiht=document.getElementById(kihinimi+"_vastus");
this.muutusevalik=document.getElementById(kihinimi+"_valik");
this.kuva();
}
this.kuva=function(){
this.vastusekiht.value=this.kogus;
}
this.v2iksemaks=function(){
this.kogus-=this.muutused[this.muutusevalik.selectedIndex];
this.kuva();
}
this.suuremaks=function(){
this.kogus+=this.muutused[this.muutusevalik.selectedIndex];
this.kuva();
}
this.algus();
}
function lehealgus(){
new Laohaldus("kiht1", 100, [1, 5, 10, 30, 100]);
new Laohaldus("kiht2", 50, [1, 2, 3]);
}
</script>
</head>
<body onload="lehealgus();">
<h1>Arvutamine</h1>
<div id="kiht1"></div>
<div id="kiht2"></div>
</body>
</html>

Lisa nupp laoseisu nullimiseks
ladu5.html
<!doctype html>
<html>
<head>
<title>Kalkulaator</title>
<script src="ladu5.js"></script>
<script>
function lehealgus(){
new Laohaldus("kiht1", 100, [1, 5, 10, 30, 100]);
new Laohaldus("kiht2", 50, [1, 2, 3]);
}
</script>
</head>
<body onload="lehealgus();">
<h1>Arvutamine</h1>
<div id="kiht1"></div>
<div id="kiht2"></div>
</body>
</html>
ladu5.js
function Laohaldus(kihinimi, kogus, muutused){ this.algus=function(){ this.kiht=document.getElementById(kihinimi); this.kogus=kogus; this.muutused=muutused; window[kihinimi+"_ladu"]=this; var rippmenyy="<select id='"+kihinimi+"_valik'>"; for(var i=0; i<muutused.length; i++){ rippmenyy+="<option>"+muutused[i]+"</option>"; } rippmenyy+="</select>"; this.kiht.innerHTML= "<input type='button' value='<' onClick='"+ kihinimi+"_ladu.v2iksemaks();' /> "+ "<input type='text' id='"+ kihinimi+"_vastus' style='width: 50px' disabled />"+ rippmenyy+ "<input type='button' value='X' onClick='"+ kihinimi+"_ladu.nulli();' /> "+ "<input type='button' value='>' onClick='"+ kihinimi+"_ladu.suuremaks();' /> "; this.vastusekiht=document.getElementById(kihinimi+"_vastus"); this.muutusevalik=document.getElementById(kihinimi+"_valik"); this.kuva(); } this.kuva=function(){ this.vastusekiht.value=this.kogus; } this.v2iksemaks=function(){ this.kogus-=this.muutused[this.muutusevalik.selectedIndex]; this.kuva(); } this.suuremaks=function(){ this.kogus+=this.muutused[this.muutusevalik.selectedIndex]; this.kuva(); } this.nulli=function(){ this.kogus=0; this.kuva(); } this.algus(); }

Koosta tsükkel platsile pallide lisamiseks
Lisa platsile parameetrid suuruse kohta pikslites.
Lisa platsile äärejoon ja määra selle kaugus servast
<!doctype html>
<html>
<head>
<title>Kujundid</title>
<script>
function Pall(x, y, r){
this.x=x;
this.y=y;
this.r=r;
this.joonista=function(g){
g.beginPath();
g.arc(this.x, this.y, this.r,
0, 2*Math.PI, true);
g.fill();
}
}
function Plats(kihiId, laius, korgus, servakaugus){
window[kihiId+"_joonis"]=this;
this.servakaugus=servakaugus;
this.alusta=function(){
var sisu=
"<canvas id='"+kihiId+"_tahvel' width='"+laius+
"' height='"+korgus+"' "+
" style='background-color: yellow' ></canvas><br/>";
document.getElementById(kihiId).innerHTML=sisu;
this.kujundid=new Array();
this.tahvel=document.getElementById(kihiId+"_tahvel");
}
this.lisaKujund=function(kujund){
this.kujundid.push(kujund);
this.joonista();
}
this.joonista=function(){
var g=this.tahvel.getContext("2d");
g.beginPath();
g.moveTo(this.servakaugus, this.servakaugus);
g.lineTo(this.tahvel.width-this.servakaugus, this.servakaugus);
g.lineTo(this.tahvel.width-this.servakaugus,
this.tahvel.height-this.servakaugus);
g.lineTo(this.servakaugus,this.tahvel.height-this.servakaugus);
g.lineTo(this.servakaugus, this.servakaugus);
g.stroke();
for(var i=0; i<this.kujundid.length; i++){
this.kujundid[i].joonista(g);
}
}
this.alusta();
}
var kiht1_joonis, kiht2_joonis
function algus(){
//Lisa platsile parameetrid suuruse kohta pikslites
//Lisa platsile äärejoon ja määra selle kaugus servast
kiht1_joonis=new Plats("kiht1", 500, 400, 30);
for(var i=0; i<10; i++){
kiht1_joonis.lisaKujund(new Pall(50+20*i, 50, 5));
}
kiht2_joonis=new Plats("kiht2", 50, 30, 3);
kiht2_joonis.lisaKujund(new Pall(25, 15, 5));
}
</script>
</head>
<body onload="algus();">
<div id="kiht1"></div>
<div id="kiht2"></div>
</body>
</html>

Vektor asukoha ja nihke jaoks. Kahest vektorist Joon ning Joontest Kujundid, mida eraldi liigutada saab. All näites hakkab kumbki kolmnurk omasoodu liikuma.
<!doctype html>
<html>
<head>
<title>Graafika</title>
<script>
function Vektor(x, y){
this.x=x;
this.y=y;
this.tekstina=function(){
return "("+this.x+", "+this.y+")";
}
this.liida=function(v){
return new Vektor(this.x+v.x, this.y+v.y);
}
this.korruta=function(kordaja){
return new Vektor(this.x*kordaja, this.y*kordaja);
}
}
function Joon(p1, p2){
this.punktid=new Array();
this.punktid[0]=p1;
this.punktid[1]=p2;
this.tekstina=function(){
return "Joon: "+this.punktid[0].tekstina()+
" - "+this.punktid[1].tekstina();
}
this.nihuta=function(nihe){
for(var i=0; i<this.punktid.length; i++){
this.punktid[i]=this.punktid[i].liida(nihe);
}
}
this.joonista=function(g){
g.beginPath();
g.moveTo(this.punktid[0].x, this.punktid[0].y);
g.lineTo(this.punktid[1].x, this.punktid[1].y);
g.stroke();
}
this.kopeeri=function(){
return new Joon(this.punktid[0], this.punktid[1]);
}
}
function Kujund(){
this.kujundid=new Array();
this.liikumisSamm=new Vektor(0, 0);
this.lisaKujund=function(k){
this.kujundid.push(k);
}
this.tekstina=function(){
var t="Kujund (";
for(var i=0; i<this.kujundid.length; i++){
t+=this.kujundid[i].tekstina()+"; ";
}
return t+")";
}
this.muudaLiikumisSamm=function(samm){
this.liikumisSamm=samm;
}
this.liigu=function(){
this.nihuta(this.liikumisSamm);
}
this.nihuta=function(nihe){
for(var i=0; i<this.kujundid.length; i++){
this.kujundid[i].nihuta(nihe);
}
}
this.joonista=function(g){
for(var i=0; i<this.kujundid.length; i++){
this.kujundid[i].joonista(g);
}
}
this.kopeeri=function(){
var t=new Kujund();
for(var i=0; i<this.kujundid.length; i++){
t.lisaKujund(this.kujundid[i].kopeeri());
}
return t;
}
}
var v1=new Vektor(30, 50);
var v2=new Vektor(70, 20);
var v3=new Vektor(40, 60);
var j1=new Joon(v1, v2);
var j2=new Joon(v2, v3);
var j3=new Joon(v3, v1);
kolmnurk=new Kujund();
kolmnurk.lisaKujund(j1);
kolmnurk.lisaKujund(j2);
kolmnurk.lisaKujund(j3);
kolmnurk2=kolmnurk.kopeeri();
kolmnurk.muudaLiikumisSamm(new Vektor(1, 0));
kolmnurk2.muudaLiikumisSamm(new Vektor(0, 1));
var g;
function liiguta(){
document.getElementById("kiht1").innerHTML=
kolmnurk.tekstina()+"<br />"+kolmnurk2.tekstina();
g.clearRect(0, 0, 400, 300);
kolmnurk.liigu();
kolmnurk.joonista(g);
kolmnurk2.liigu();
kolmnurk2.joonista(g);
}
function leheAlgus(){
g=document.getElementById("tahvel1").getContext("2d");
setInterval("liiguta();", 500);
}
</script>
</head>
<body onload="leheAlgus()">
<canvas id="tahvel1" width="400" height="300" style="background-color: yellow">
</canvas>
<div id="kiht1"></div>
</body>
</html>

Kaks postirida
<!doctype html>
<html>
<head>
<title>3D</title>
<script>
var keskx=200;
var kesky=150;
var suurendus=10;
function ex(px, py, pz){ //x ekraanil
return keskx+suurendus*px/pz;
}
function ey(px, py, pz){
return kesky-suurendus*py/pz;
}
function joonista(){
var g=document.getElementById("tahvel1").getContext("2d");
g.beginPath();
var x=-20;
var y=40;
for(var z=5; z<50; z+=5){
g.moveTo(ex(x, 0, z), ey(x, 0, z));
g.lineTo(ex(x, y, z), ey(x, y, z));
}
//Lisage ka paremale poole postid
x=20;
for(var z=5; z<50; z+=5){
g.moveTo(ex(x, 0, z), ey(x, 0, z));
g.lineTo(ex(x, y, z), ey(x, y, z));
}
g.stroke();
}
</script>
</head>
<body onload="joonista();">
<canvas id="tahvel1" width="400" height="300"
style="background-color: yellow"/></canvas>
</body>
</html>

<!doctype html>
<html>
<head>
<title>Laiendamine</title>
<script>
String.prototype.tahtedeArv=function(){
return this.length;
}
String.prototype.sonadeArv=function(){
return this.split(" ").length;
}
function leheAlgus(){
var lause="Juku tuli kooli";
document.getElementById("vastus").innerHTML=
lause.tahtedeArv()+" tähte, "+
lause.sonadeArv()+" sõna.";
}
</script>
</head>
<body onload="leheAlgus();">
<div id="vastus"></div>
</body>
</html>
15 tähte, 3 sõna.
Käsklus muudaVektoritKorrutades, jätab objekti samaks, lihtsalt muudab selle x- ja y-koordinaati kordaja jagu. Käsklus uusVektorKorrutades jätab vana vektori muutumatuks, käsust tagastatakse uus vektor, mille võimalik hilisem muutmine enam esialgset vektorit ei sega.
<!doctype html>
<html>
<head>
<title>Laiendamine</title>
<script>
function Vektor(x, y){
this.x=x;
this.y=y;
this.pikkus=function(){
return Math.sqrt(this.x*this.x+this.y*this.y);
}
}
Vektor.prototype.tekstina=function(){
return "("+this.x+", "+this.y+")";
}
Vektor.prototype.muudaVektoritKorrutades=function(kordaja){
this.x=this.x*kordaja;
this.y=this.y*kordaja;
}
Vektor.prototype.uusVektorKorrutades=function(kordaja){
return new Vektor(this.x*kordaja, this.y*kordaja);
}
function leheAlgus(){
var autokiirus=new Vektor(3, 4);
autokiirus.muudaVektoritKorrutades(2);
document.getElementById("vastus").innerHTML=
"Tekstina: "+autokiirus.tekstina()+
" kogukiirus "+autokiirus.pikkus();
var jalgrattakiirus=autokiirus.uusVektorKorrutades(0.2);
alert(jalgrattakiirus.tekstina());
alert(autokiirus.tekstina());
}
</script>
</head>
<body onload="leheAlgus();">
<div id="vastus"></div>
</body>
</html>
(1.2, 1.6)
(6, 8)
Ringile antakse funktsiooni parameetrina kaasa ligipääs teisele ringile. Funktsiooni sees otsustatakse, kas ringid puutuvad omavahel kokku.
<!doctype html>
<html>
<head>
<title>Laiendamine</title>
<script>
function Asukoht(x, y){
this.x=x;
this.y=y;
this.tekstina=function(){
return "("+this.x+", "+this.y+")";
}
}
var a=new Asukoht(0, 0);
function Ring(x, y, r){
Asukoht.call(this, x, y);
this.raadius=r;
this.pindala=function(){
return 3.14*this.raadius*this.raadius;
}
this.kasPuutub=function(r){
var dx=this.x-r.x;
var dy=this.y-r.y;
return Math.sqrt(dx*dx+dy*dy)<this.raadius+r.raadius;
}
}
Ring.prototype=a;
var r1=new Ring(2, 4, 7);
var r2=new Ring(2, 80, 4);
function leheAlgus(){
document.getElementById("vastus").innerHTML=
r1.tekstina()+r2.tekstina()+" puutub: "+r1.kasPuutub(r2);
}
</script>
</head>
<body onload="leheAlgus();">
<div id="vastus"></div>
</body>
</html>
(2, 4)(2, 80) puutub: false
Ringe on rohkem. Kõik algul oleva ringiga kokku puutuvad ringide muutujad kopeeritakse eraldi massiivi ning sealt trükitakse välja.
<!doctype html>
<html>
<head>
<title>Laiendamine</title>
<script>
function Asukoht(x, y){
this.x=x;
this.y=y;
this.tekstina=function(){
return "("+this.x+", "+this.y+")";
}
}
var a=new Asukoht(0, 0);
function Ring(x, y, r){
Asukoht.call(this, x, y);
this.raadius=r;
this.pindala=function(){
return 3.14*this.raadius*this.raadius;
}
this.kasPuutub=function(r){
var dx=this.x-r.x;
var dy=this.y-r.y;
return Math.sqrt(dx*dx+dy*dy)<this.raadius+r.raadius;
}
}
Ring.prototype=a;
var ringid=new Array();
ringid[0]=new Ring(2, 4, 7);
ringid[1]=new Ring(2, 80, 4);
ringid[2]=new Ring(2, 8, 4);
ringid[3]=new Ring(20, 4, 40);
ringid[4]=new Ring(10, 10, 14);
function leheAlgus(){
var puutuvad=new Array();
for(var i=1; i<ringid.length; i++){
if(ringid[0].kasPuutub(ringid[i])){
puutuvad.push(ringid[i]);
}
}
var t="Tabatud: ";
for(var i=0; i<puutuvad.length; i++){
t+=puutuvad[i].tekstina();
}
document.getElementById("vastus").innerHTML=t;
}
</script>
</head>
<body onload="leheAlgus();">
<div id="vastus"></div>
</body>
</html>
Tabatud: (2, 8)(20, 4)(10, 10)
<!doctype html>
<html>
<head>
<title>Ringi arvutused</title>
<script>
var keskx=200;
var kesky=150;
var tekstiraadius=100;
var ringiraadius=90;
var siseraadius=80;
var nurk=Math.PI/2;
var punktidearv=12;
var nurgavahe=2*Math.PI/punktidearv;
function joonista(){
var g=document.getElementById("t1").getContext("2d");
nurk-=nurgavahe;
g.textAlign="center";
g.textBaseline="middle";
for(var i=1; i<=punktidearv; i++){
g.fillText(i, keskx+tekstiraadius*Math.cos(nurk),
kesky-tekstiraadius*Math.sin(nurk));
g.beginPath();
g.moveTo(keskx+ringiraadius*Math.cos(nurk),
kesky-ringiraadius*Math.sin(nurk));
g.lineTo(keskx+siseraadius*Math.cos(nurk),
kesky-siseraadius*Math.sin(nurk));
g.stroke();
nurk-=nurgavahe;
}
}
</script>
</head>
<body onload="joonista();">
<h1>Ruudud ringjoonel</h1>
<canvas id="t1" width="400" height="300"
style="background-color: yellow" ></canvas>
</body>
</html>

<!doctype html>
<html>
<head>
<title>Nurga leidmine</title>
<script>
var keskx=200;
var kesky=150;
var ringiraadius=30;
function hiirLiigub(e){
var tahvlikoht=document.getElementById("t1").
getBoundingClientRect();
var g=document.getElementById("t1").getContext("2d");
g.clearRect(0, 0, 400, 300);
var hx=e.clientX-tahvlikoht.left;
var hy=e.clientY-tahvlikoht.top;
var nurk=Math.atan2(hy-kesky, hx-keskx);
g.beginPath();
g.arc(keskx, kesky, ringiraadius, 0, 2*Math.PI, true);
g.stroke();
g.beginPath();
g.arc(keskx, kesky, 5, 0, 2*Math.PI, true);
g.stroke();
g.beginPath();
g.moveTo(keskx+ringiraadius*Math.cos(nurk),
kesky+ringiraadius*Math.sin(nurk));
g.lineTo(keskx, kesky);
g.stroke();
}
</script>
</head>
<body onload="hiirLiigub(event)">
<h1>Ruudud ringjoonel</h1>
<canvas id="t1" width="400" height="300"
style="background-color: yellow"
onmousemove="hiirLiigub(event)"></canvas>
</body>
</html>

<!doctype html>
<html>
<head>
<title>Nurga leidmine</title>
<script>
var kujundid=new Array();
function KeeratavNupp(x, y, r){
this.x=x;
this.y=y;
this.r=r;
this.nurk=0;
this.joonista=function(g){
g.beginPath();
g.arc(this.x, this.y, this.r, 0, 2*Math.PI, true);
g.stroke();
g.beginPath();
g.arc(this.x, this.y, 5, 0, 2*Math.PI, true);
g.stroke();
g.beginPath();
g.moveTo(this.x+this.r*Math.cos(this.nurk),
this.y+this.r*Math.sin(this.nurk));
g.lineTo(this.x, this.y);
g.stroke();
}
}
function joonista(){
var g=document.getElementById("t1").getContext("2d");
g.clearRect(0, 0, 400, 300);
for(var i=0; i<kujundid.length; i++){
kujundid[i].joonista(g);
}
}
kujundid.push(new KeeratavNupp(100, 100, 30));
kujundid.push(new KeeratavNupp(200, 100, 30));
</script>
</head>
<body onload="joonista();">
<h1>Ruudud ringjoonel</h1>
<canvas id="t1" width="400" height="300"
style="background-color: yellow" ></canvas>
</body>
</html>

<!doctype html>
<html>
<head>
<title>Nurga leidmine</title>
<script>
function KeeratavNupp(x, y, r){
this.x=x;
this.y=y;
this.r=r;
this.nurk=0;
this.joonista=function(g){
g.beginPath();
g.arc(this.x, this.y, this.r, 0, 2*Math.PI, true);
g.stroke();
g.beginPath();
g.arc(this.x, this.y, 5, 0, 2*Math.PI, true);
g.stroke();
g.beginPath();
g.moveTo(this.x+this.r*Math.cos(this.nurk),
this.y+this.r*Math.sin(this.nurk));
g.lineTo(this.x, this.y);
g.stroke();
}
this.kasPihtas=function(hx, hy){
var dx=hx-this.x;
var dy=hy-this.y;
return dx*dx+dy*dy<this.r*this.r;
}
this.muudaNurk=function(hx, hy){
this.nurk=Math.atan2(hy-this.y, hx-this.x);
}
}
function KujunditeHaldus(tahvliId){
this.kujundid=new Array();
this.tahvliId=tahvliId;
this.joonista=function(){
var g=document.getElementById(this.tahvliId).getContext("2d");
g.clearRect(0, 0, 400, 300);
for(var i=0; i<this.kujundid.length; i++){
this.kujundid[i].joonista(g);
}
}
this.lisaKujund=function(kujund){
this.kujundid.push(kujund);
}
this.hiir=function(e){
var tahvlikoht=document.getElementById(this.tahvliId).
getBoundingClientRect();
var hx=e.clientX-tahvlikoht.left;
var hy=e.clientY-tahvlikoht.top;
for(var i=0; i<this.kujundid.length; i++){
if(this.kujundid[i].kasPihtas(hx, hy)){
this.kujundid[i].muudaNurk(hx, hy);
}
}
this.joonista();
}
}
var haldus=new KujunditeHaldus("t1");
haldus.lisaKujund(new KeeratavNupp(100, 100, 30));
haldus.lisaKujund(new KeeratavNupp(200, 100, 30));
</script>
</head>
<body onload="haldus.joonista();">
<h1>Ruudud ringjoonel</h1>
<canvas id="t1" width="400" height="300"
style="background-color: yellow"
onmousemove="haldus.hiir(event)"></canvas>
</body>
</html>

Planeet tiirleb ringjoonel, kaaslane ümber planeedi.
<!doctype html>
<html>
<head>
<title>Ringi arvutused</title>
<script>
var keskx=200;
var kesky=150;
var ringiraadius=100;
var nurk=0;
var nurgavahe=0.01; //radiaani
var nurgavahe2=0.3; //radiaani
var nurk2=Math.PI/2;
function liigu(){
var g=document.getElementById("t1").getContext("2d");
g.clearRect(0, 0, 400, 300);
var x1=keskx+ringiraadius*Math.cos(nurk);
var y1=kesky-ringiraadius*Math.sin(nurk);
g.fillRect(x1, y1, 5, 5);
g.fillRect(x1+15*Math.cos(nurk2),
y1-15*Math.sin(nurk2), 5, 5);
nurk+=nurgavahe;
nurk2+=nurgavahe2;
}
</script>
</head>
<body onload="setInterval('liigu()', 50);">
<h1>Ringjoone parameetriline võrrand</h1>
<canvas id="t1" width="400" height="300"
style="background-color: yellow" ></canvas>
</body>
</html>


<!doctype html>
<html>
<head>
<title>Ringi arvutused</title>
<script>
function Liikur(x, y, kiirus, nurk, nurgamuutus){
this.algus=function(){
this.x=x;
this.y=y;
this.kiirus=kiirus;
this.nurk=nurk;
this.nurgamuutus=nurgamuutus;
}
this.liigu=function(){
this.nurk+=this.nurgamuutus;
this.x+=this.kiirus*Math.cos(this.nurk);
this.y+=this.kiirus*Math.sin(this.nurk);
}
this.muudaNurk=function(uusNurk){
this.nurk=uusNurk;
}
this.uusRooliAsend=function(uusAsend){
this.nurgamuutus=uusAsend;
}
this.joonista=function(g){
g.beginPath();
g.arc(this.x, this.y, 10, 0, 2*Math.PI, false);
g.stroke();
g.beginPath();
g.moveTo(this.x,this.y);
//Joone ots
var jotsx=this.x+10*this.kiirus*Math.cos(this.nurk);
var jotsy=this.y+10*this.kiirus*Math.sin(this.nurk);
g.lineTo(jotsx, jotsy);
var rattapikkus=10;
var rattanurk=this.nurk+3*this.nurgamuutus;
var rattaotsx=jotsx+rattapikkus*Math.cos(rattanurk);
var rattaotsy=jotsy+rattapikkus*Math.sin(rattanurk);
g.lineTo(rattaotsx, rattaotsy)
g.stroke();
}
this.algus();
}
function Rool(keskx, kesky, raadius, nurk){
this.algus=function(){
this.keskx=keskx;
this.kesky=kesky;
this.raadius=raadius;
this.nurk=nurk;
}
this.kysiNurk=function(){
return this.nurk+Math.PI/2;
}
this.joonista=function(g){
g.beginPath();
g.arc(this.keskx, this.kesky, this.raadius,
this.nurk-0.4, this.nurk+0.4, false);
g.stroke();
g.beginPath();
g.arc(this.keskx+this.raadius*Math.cos(this.nurk),
this.kesky+this.raadius*Math.sin(this.nurk),
5, 0, 2*Math.PI, false);
g.stroke();
g.save();
g.translate(this.keskx, this.kesky);
g.rotate(this.nurk+(Math.PI/2));
g.fillText("Rool", 0, 0);
g.restore();
}
this.uusNurk=function(hx, hy){
this.nurk=Math.atan2(hy-kesky, hx-keskx);
}
this.algus();
}
var auto1=new Liikur(100, 100, 1, Math.PI/3, -0.1);
var rool1=new Rool(50, 100, 30, -Math.PI/2);
function hiirLiigub(e){
var tahvlikoht=document.getElementById("t1").getBoundingClientRect();
var hx=e.clientX-tahvlikoht.left;
var hy=e.clientY-tahvlikoht.top;
rool1.uusNurk(hx, hy);
}
var ringx=200, ringy=150, ringr=30, ringideArv=0;
function ringLiiklus(){
var dx=auto1.x-ringx;
var dy=auto1.y-ringy;
if(Math.sqrt(dx*dx+dy*dy)<ringr+10){
auto1.x=100; auto1.y=100;
}
}
function liigu(){
var g=document.getElementById("t1").getContext("2d");
g.clearRect(0, 0, 400, 300);
auto1.uusRooliAsend(rool1.kysiNurk()/10);
ringLiiklus();
var vanax=auto1.x;
auto1.liigu();
if(auto1.y<ringy){
if(vanax>ringx && auto1.x<ringx){ringideArv++;}
if(vanax<ringx && auto1.x>ringx){ringideArv--;}
}
auto1.joonista(g);
rool1.joonista(g);
g.beginPath();
g.arc(ringx, ringy, ringr, 0, 2*Math.PI, true);
g.fill();
g.fillText("ringe: "+ringideArv, 300, 30);
g.beginPath();
g.moveTo(ringx, ringy);
g.lineTo(ringx, 0);
g.stroke();
}
</script>
</head>
<body onload="setInterval('liigu()', 50);">
<h1>Ringjoone parameetriline võrrand</h1>
<canvas id="t1" width="400" height="300"
style="background-color: yellow"
onmousemove="hiirLiigub(event)"></canvas>
</body>
</html>
