Lahendusi ja täiendusi

Objektid

Ringi pindala arvutaja objektina


<!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>



Kaks pindala arvutajat


<!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>



Seadistatav kalkulaator



<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>



Ladu




<!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='&lt;' 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='&gt;' 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>




<!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='&lt;' onClick='"+
kihinimi+"_ladu.v2iksemaks();' /> "+
                "<input type='text' id='"+kihinimi+"_vastus' style='width: 50px' disabled />"+
                rippmenyy+
                "<input type='button' value='&gt;' 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>





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='&lt;' 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='&gt;' 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();
          }
          



Pallid platsil


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>




Kahemõõtmelised kujundid


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>




Prototüübid

String


<!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.



Vektor


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)


Ring


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


Ringide massiiv


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)


Nurgaarvutused


Kella numbrilaud


<!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>



Keeratav nupp


<!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>


Nupp objektina


<!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>



Keeratavad nupud objektina

<!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>


Maa ja Kuu


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>

Roolitav liikur ringrajal


<!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>