// // // // function lavoro(){ secondaria(); } // /* ]]>*/ function secondaria(){ alert("Al lavoro usando trepunticontrollo !"); } // var puntoa00=["a",256,17] var puntoda00=["da",288,-66.3333333333]; var puntob00=["b",951,736] var puntodb00=["db",910.75,789.5]; // function dot00(va,vb){ return va[1]*vb[1]+va[2]*vb[2]; } // function dif00(va,vb){ return ["a-b",va[1]-vb[1],va[2]-vb[2]]; } // function med00(va,vb){ return ["(a+b)/2",(va[1]+vb[1])/2,(va[2]+vb[2])/2]; } // function provetto(pa,pb,xy){ var x=xy[1],y=xy[2]; var vale=(pb[2]-pa[2])*(x-pa[1])-(pb[1]-pa[1])*(y-pa[2]); return vale; } // function raggiotan00(pa,pc,pb){ var ss,pamm,pamc,pm,amq,acq,cmq,qa; if((pb[2]-pa[2])*(pc[1]-pa[1])>(pb[1]-pa[1])*(pc[2]-pa[2]))ss=" 0, 0, 1 "; else ss=" 0, 0, 0 "; pm=["M ",(pa[1]+pb[1])/2,(pa[2]+pb[2])/2]; pamm=["A-M ",(pa[1]-pm[1]),(pa[2]-pm[2])]; amq=dot00(pamm,pamm); pamc=["A-C ",(pa[1]-pc[1]),(pa[2]-pc[2])]; acq=dot00(pamc,pamc); cmq=acq-amq; if(1.e-12>cmq)cmq=1.e-12; return ["Raggio ",Math.sqrt(acq*amq/cmq),ss]; } // var valetre=3; var assegnati=[]; var ottenuti=[]; // function fatrepunti00(pa,pda,pb,pdb){ var dnum=["d",0,0],vanum=["va",0,0],vbnum=["vb",0,0]; var vnorma,vv,wanum,wbnum,wdnum,hnum; var cosba,cosda,sinda,cosdb,sindb,ssnum,panum,pdnum,pbnum,pbvnum; var fverosegmento,qlatoabnum,qlatoabvnum,orto,bmanum; var quantomisposto,possibile1=0,possibile2=0,pr; assegnati=[pa,pda,pb,pdb]; with(Math){ // vnorma=sqrt((pa[1]-pb[1])*(pa[1]-pb[1])+ (pa[2]-pb[2])*(pa[2]-pb[2])+1.e-60); // dnum=["dnum",(pb[1]-pa[1])/vnorma, (pb[2]-pa[2])/vnorma]; dorto=["dorto",dnum[2],-dnum[1]]; vv=sqrt((pda[1]-pa[1])*(pda[1]-pa[1])+ (pda[2]-pa[2])*(pda[2]-pa[2])+1.e-60); vanum=["vanum",(pda[1]-pa[1])/vv, (pda[2]-pa[2])/vv]; vv=sqrt((pdb[1]-pb[1])*(pdb[1]-pb[1])+ (pdb[2]-pb[2])*(pdb[2]-pb[2])+1.e-60); // vbnum=["vbnum",(pdb[1]-pb[1])/vv,(pdb[2]-pb[2])/vv]; hnum=1+abs(dot00(vanum,dorto)+dot00(vbnum,dorto))/2.0; // cosba=(vanum[1]*vbnum[1]+vanum[2]*vbnum[2]); cosda=(vanum[1]*dnum[1]+vanum[2]*dnum[2]); sinda=(dnum[2]*vanum[1]-dnum[1]*vanum[2]); cosdb=(vbnum[1]*dnum[1]+vbnum[2]*dnum[2]); sindb=(dnum[2]*vbnum[1]-dnum[1]*vbnum[2]); ssnum=hnum*(sqrt(16-(sindb+sinda)*(sindb+sinda)) -cosdb-cosda)/(14-2*cosba); // alert("ssnum "+ssnum); panum=["PAnum",ssnum*vanum[1],ssnum*vanum[2]]; pdnum=["Pdnum",hnum*dnum[1],hnum*dnum[2]]; pbnum=["PBnum",pdnum[1]-ssnum*vbnum[1], pdnum[2]-ssnum*vbnum[2]]; pbvnum=["PBvnum",dnum[1]-ssnum*vbnum[1], dnum[2]-ssnum*vbnum[2]]; // fverosegmento=["fverosegmento",pbvnum[1]-panum[1], pbvnum[2]-panum[2]]; qlatoabvnum=dot00(fverosegmento,fverosegmento)+1.e-60; vv=sqrt(dot00(fverosegmento,fverosegmento)+1.e-60); orto=["orto",fverosegmento[2]/vv,-fverosegmento[1]/vv]; // bmanum=["Pb-Pa",pbnum[1]-panum[1],pbnum[2]-panum[2]]; qlatoabnum=dot00(bmanum,bmanum); quantomisposto=sqrt(qlatoabnum-qlatoabvnum); // possibile1=["possibile1", pa[1]+vnorma*(panum[1]+ (fverosegmento[1]+quantomisposto*orto[1])/2), pa[2]+vnorma*(panum[2]+ (fverosegmento[2]+quantomisposto*orto[2])/2)]; // possibile2=["possibile2", pa[1]+vnorma*(panum[1]+ (fverosegmento[1]-quantomisposto*orto[1])/2), pa[2]+vnorma*(panum[2]+ (fverosegmento[2]-quantomisposto*orto[2])/2)]; /* if( provetto(panum,pbvnum,pb)*provetto(panum,pbvnum,possibile2) >provetto(panum,pbvnum,pb)*provetto(panum,pbvnum,possibile1) ){ possibile1[1]=possibile2[1]; possibile1[2]=possibile2[2]; } */ /* media=med00(possibile1,possibile2); diffg=dif00(pb,pa); diffe=dif00(possibile1,pa); // *(dnum[1]*diffg[2]-dnum[2]*diffg[1]) if((dnum[1]*diffe[2]-dnum[2]*diffe[1]) >0 ){ possibile1[1]=possibile2[1]; possibile1[2]=possibile2[2]; } */ if(Math.abs(provetto(pa,pb,possibile2))> Math.abs(provetto(pa,pb,possibile1))){ possibile1[1]=possibile2[1]; possibile1[2]=possibile2[2]; } // stampacontrollo(dot00(possibile1,bmanum)); // }; // pr = ["risultati", ["pau",pa[1]+vnorma*panum[1], pa[2]+vnorma*panum[2]], ["pbu",pa[1]+vnorma*pbvnum[1], pa[2]+vnorma*pbvnum[2]], possibile1,possibile2, ["pa",pa[1],pa[2]],["pb",pb[1],pb[2]],0,0,0]; // pr[7]=raggiotan00(pr[5],pr[1],med00(pr[1],pr[valetre])); pr[8]=raggiotan00(med00(pr[1],pr[valetre]),pr[valetre],med00(pr[2],pr[valetre])); pr[9]=raggiotan00(med00(pr[2],pr[valetre]),pr[2],pr[6]); // ottenuti=pr; return pr; } // function controlli(vva){ var t1,t2,t3,t4,t5,t6; t1=dot00(dif00(vva[1],vva[5]),dif00(vva[1],vva[5])); t2=dot00(dif00(vva[2],vva[6]),dif00(vva[2],vva[6])); t3=dot00(dif00(vva[3],vva[1]),dif00(vva[3],vva[1])); t4=dot00(dif00(vva[4],vva[1]),dif00(vva[4],vva[1])); t5=dot00(dif00(vva[3],vva[2]),dif00(vva[3],vva[2])); t6=dot00(dif00(vva[4],vva[2]),dif00(vva[4],vva[2])); return ["controllo", Math.sqrt(t1), Math.sqrt(t2), Math.sqrt(t3/4), Math.sqrt(t4/4), Math.sqrt(t5/4), Math.sqrt(t6/4)]; } // // ============================= // PER USARE LA CUBICA DI BEZIER // // // v è il punto vecchio // c è il punto centrale // f è il punto futuro. // Notare che non uso v[0],c[0] ed f[0] che possono servire per riconoscere i punti. // function pausilio(v,c,f){ var cmf=["L",c[1]-f[1],c[2]-f[2]]; var vmf=["L",v[1]-f[1],v[2]-f[2]]; var ff=-0.91*(cmf[1]*vmf[1]+cmf[2]*vmf[2])/(vmf[1]*vmf[1]+vmf[2]*vmf[2]+1.e-30); return ['"S" ',(c[1]+ff*vmf[1]+(c[1]+f[1])/2)/2,(c[2]+ff*vmf[2]+(c[2]+f[2])/2)/2 ]; } // function pausilio2(v,c,f){ var come,tende=["tende",(f[1]-v[1])/2,(f[2]-v[2])/2]; come=0.25; return ['"S" ',c[1]+come*tende[1],c[2]+come*tende[2] ]; } // function facubicas(vet){ var j,pau,vcub="",n=vet.length; for(j=2;n>j;j++){ pau=pausilio(vet[j-2],vet[j-1],vet[j]); vcub+="S "+(Math.round(8*pau[1])/8)+","+(Math.round(8*pau[2])/8)+ " "+vet[j][1]+","+vet[j][2]+" "; } // alert(vcub); return vcub; } // function facubicas2(vet){ var j,pau,vcub="",n=vet.length; for(j=2;n>j;j++){ pau=pausilio2(vet[j-2],vet[j-1],vet[j]); vcub+="S "+(Math.round(8*pau[1])/8)+","+(Math.round(8*pau[2])/8)+ " "+vet[j][1]+","+vet[j][2]+" "; } // alert(vcub); return vcub; } // function inlinea(vet){ var j,vlin="",n=vet.length; for(j=0;n>j;j++){ vlin+="L "+vet[j][1]+","+vet[j][2]+" "; } return vlin; } // function facerchio(cx,cy,rx,ry,punti){ var j,k,vx,vy,ss="[ "; for(k=-2;punti>k;k++){ j=-k; vx=rx*Math.cos(2*Math.PI*j/punti)+cx; vy=ry*Math.sin(2*Math.PI*j/punti)+cy; ss+="[ "+j+","+(Math.round(4*vx)/4)+","+ (Math.round(4*vy)/4)+"],"; } ss+="[ "+punti+","+(rx+cx)+","+cy+" ] ]"; // alert(ss) return ss; } //