function funzione(){ alert(arguments.length); } funzione(1,2,3);Con questa prova, variando il numero dei parametri passati alla funzione ottengo un valore diverso di arguments.length, mentre se metto un qualunque numero di parametri attesi dalla funzione arguments.length resta sempre zero.
Ecco che quindi posso manipolare la mia funzione della retta per due punti;
function RettaPerDuePunti(Punto1,Punto2,Colore)può diventare anche
function RettaPerDuePunti(X1,Y1,X2,Y2,Colore)...che permette di tracciare una retta per due punti senza bisogno di istanziare i punti.
Provo ad eseguire la manipolazione...
function RettaPerDuePunti(){ var matrice=[]; var prevY; var Y; var Z; var H=1; var delta; if(arguments.length==3){ this.pt1=arguments[0]; this.pt2=arguments[1]; this.X1=this.pt1.X; this.Y1=this.pt1.Y; this.X2=this.pt2.X; this.Y2=this.pt2.Y; this.Colore=arguments[arguments.length-1]; } else if (arguments.length==5){ this.X1=arguments[0]; this.Y1=arguments[1]; this.X2=arguments[2]; this.Y2=arguments[3] this.Colore=arguments[arguments.length-1]; } this.lunghezza=Math.sqrt(Math.pow((this.Y2-this.Y1),2)+Math.pow((this.X2-this.X1),2)); this.traccia=function(){ //se la coordinata X del primo punto è minore della coordinata X del secondo punto... if(this.X1<this.X2){ for(var i=this.X1;i<=this.X2;i++){ var elemento=document.createElement("DIV"); matrice.push(elemento); //per la X di ogni punto dell'intervallo si calcola Y //secondo la formula: /* (y-y1)/(y2-y1) = (x-x1)/(x2-x1) (y-y1) = (x-x1)/(x2-x1)*(y2-y1) y=(x-x1)/(x2-x1)*(y2-y1)+y1 */ Y=(i-this.X1)/(this.X2-this.X1)*(this.Y2-this.Y1)+this.Y1 Z=Y; //CODICE PER TRACCIARE UNA LINEA RIPIDA CONTINUA // Si traccia un DIV di ordinata Y = y1 e di altezza calcolata in base alla //differenza fra y2 e y1 /* Se y2 è maggiore di y1 si deve tracciare un DIV che parta dal pixel appena superiore a y1 e che sia di altezza pari alla differenza fra y2 e y1 diminuita di un pixel Se y2 è minore di y1 si deve tracciare un DIV che parta dal pixel in questione (Z resta uguale a Y) (ordinata Z) e che abbia un' altezza pari alla differenza fra y2 e y1. */ //CALCOLO della differenza (delta) fra la coordinata Y di un punto e quella del punto precedente (prevY) if(prevY!=null) { delta=Y-prevY; if(delta>1) { Z=Y-delta+1; H=delta; } if(delta<-1) H=-delta; } elemento.setAttribute("style","width:1px;height:"+H+"px;background-color:"+this.Colore+";position:absolute;left:"+i+"px;top:"+Z+"px;"); prevY=Y; document.body.appendChild(elemento); } } //se la coordinata X del secondo punto è minore di quella del primo punto else if(this.X1>this.X2){ for(var i=this.X1;i>=this.X2;i-=1){ var elemento=document.createElement("DIV"); matrice.push(elemento); Y=(i-this.X1)/(this.X2-this.X1)*(this.Y2-this.Y1)+this.Y1 Z=Y; //CALCOLO if(prevY!=null) { delta=Y-prevY; if(delta>1) { Z=Y-delta+1; H=delta; } if(delta<-1) H=-delta; } elemento.setAttribute("style","width:1px;height:"+H+"px;background-color:"+this.Colore+";position:absolute;left:"+i+"px;top:"+Z+"px;"); prevY=Y; document.body.appendChild(elemento); } } else if(this.X1==this.X2){ if(this.Y1<this.Y2){ var e=Traccia(this.X1,this.Y1,1,Y2-this.Y1,this.Colore); matrice.push(e); } else if(this.Y1>this.Y2){ var e=Traccia(this.X2,this.Y2,1,this.Y1-this.Y2,this.Colore); matrice.push(e); } } } this.traccia(); this.cancella=function(){ for(var n=0;n<matrice.length;n++){ document.body.removeChild(matrice[n]); } } }
Nessun commento:
Posta un commento