function polymodelsMain(){this.version='0.92';var m=getQueryVariable('m');if(m){m=m.replace(/%20/g,' ');m=m.toLowerCase();this.shapeName=m;}else{this.shapeName='icosidodecahedron';this.shapeName='rhombicosidodecahedron';this.shapeName='cube';this.shapeName='truncated icosahedron';} this.curvyQ=['cone','cylinder','sphere','hemisphere'].indexOf(this.shapeName)>=0;this.flatyQ=['plane'].indexOf(this.shapeName)>=0;console.log("polymodelsMain",this.shapeName);w=550;h=550;topMargin=65;var s="";s+='
';s+='';s+='';s+='
';s+='';s+='';s+='
';s+='
';s+='
';s+='
';s+='';if(this.curvyQ||this.flatyQ){}else{s+='';s+='';s+='';s+='
';s+="Coloring: ";s+=getDropdownHTML(['Multi','Shaded','Two','Glass','PureGlass','Beams'],'clrChg','clrType');s+='
';} s+='
';s+='';s+='';s+='
© 2016 MathsIsFun.com v'+this.version+'
';s+='
';document.write(s);el=document.getElementById('canvas1');ratio=2;el.width=w*ratio;el.height=h*ratio;el.style.width=w+"px";el.style.height=h+"px";g=el.getContext("2d");g.setTransform(ratio,0,0,ratio,0,0);el2=document.getElementById('canvas2');el2.width=w*ratio;el2.height=h*ratio;el2.style.width=w+"px";el2.style.height=h+"px";g2=el2.getContext("2d");g2.setTransform(ratio,0,0,ratio,0,0);transMat=[[1,0,0],[0,1,0],[0,0,1],[0,0,0]];this.f=500;this.shapes=[];this.clrs=["#ff0000","#0000ff","#ff9900","#00ff00","#ffff00","#660066","#99ff00","#0099ff","#00ff99","#9900ff","#ff0099","#006666","#666600","#990000","#009999","#999900","#003399","#ff00ff","#993333","#330099"];this.explodeQ=false;this.netQ=false;this.solidQ=true;dragQ=false;draggingQ=false;prevmouseX=0;prevmouseY=0;this.poly=new Poly();xAngle=2;yAngle=4;zAngle=0;el.addEventListener('touchstart',ontouchstart,false);el.addEventListener('touchmove',ontouchmove,false);el.addEventListener('mousedown',onmouseDown,false);el.addEventListener('mousemove',onmouseMove,false);el.addEventListener("mouseup",onmouseUp,false);polys=getPolyData();polyNo=0;for(var i=0;i';for(var i=0;i'+opts[i]+'';} s+='';return s;} function clrChg(){var el=document.getElementById('clrType');if(el.selectedIndex==-1) return null;var t=el.options[el.selectedIndex].text;setClrs(t);update();} function getClrType(){if(this.curvyQ||this.flatyQ){if(this.shapeName=='plane'){return "Glass";}else{return "Shaded";}}else{var div=document.getElementById('clrType');if(div.selectedIndex==-1)return 'Multi';return div.options[div.selectedIndex].text;}} function init(){} function restart(){console.log("restart",polyNo,polys[polyNo][0]);shapes=[];poly.shapeSource="data";poly.shapeType=polys[polyNo][0];setShapesFromPoly();document.getElementById('title').innerHTML=poly.shapeType.capitalize();g2.clearRect(0,0,el.width,el.height);if(this.netQ)drawNet();this.frameNo=0;g.clearRect(0,0,el.width,el.height);update();update();} function animate(){this.frameNo++;if(dragQ){}else{settransMat(xAngle,yAngle,zAngle,transMat);update();} if(this.frameNo<1e8){requestAnimationFrame(animate);}} function update(){g.clearRect(0,0,el.width,el.height);if(this.solidQ)drawShapes();} function drawShapes(){var prevDepth=0;var sortNeededQ=false;for(var i=0,len=shapes.length;i0){if(shape.depth>0)+1;var grn=(dark*255>>0)+1;angle=this.getNormalAngle(this.pts,1);dark=(1-angle/Math.PI);var blu=(dark*255>>0)+1;this.fillClr='rgba('+red+','+grn+','+blu+','+alpha+')';};Shape3D.prototype.getNormalAngle=function(pts,dimN){var a=[pts[1].x-pts[0].x,pts[1].y-pts[0].y,pts[1].z-pts[0].z];var b=[pts[2].x-pts[1].x,pts[2].y-pts[1].y,pts[2].z-pts[1].z];var cross=[a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]];var mag=Math.sqrt(cross[0]*cross[0]+cross[1]*cross[1]+cross[2]*cross[2]);var theta=Math.acos(cross[dimN]/mag);return theta;} Shape3D.prototype.calcCentroid=function(){centroid=new Pt3d;for(var i=0;i0){centroid.x/=this.pts.length;centroid.y/=this.pts.length;centroid.z/=this.pts.length;}};Shape3D.prototype.drawsurface=function(aboutEyeQ,viewType){var xsum=0;var ysum=0;var zsum=0;var clips=[];var zMin=Number.MAX_VALUE;var zMax=-Number.MAX_VALUE;var i=0;var ptRot;while(i2){g.beginPath();for(i=0,len=pt2s.length;imaxPt.x)maxPt.x=pt.x;if(pt.y>maxPt.y)maxPt.y=pt.y;}} var xSpan=maxPt.x-minPt.x;var ySpan=maxPt.y-minPt.y;var scale=Math.min(w/xSpan,(h-topMargin)/ySpan);var xLeft=(w-xSpan*scale)/2;var yTop=(h-topMargin-ySpan*scale)/2+topMargin;g2.clearRect(0,0,el.width,el.height);if(bareQ){g2.strokeStyle='#000000';g2.fillStyle='white';}else{g2.strokeStyle='#ff4400';g2.fillStyle='rgba(250,230,200,0.3)';} for(i=0;i0){if(xx2)x2=x;if(yy2)y2=y;}}} console.log("canvasGetExtents",can,x1,y1,x2,y2);return{left:x1,top:y1,wd:x2-x1,ht:y2-y1}} function canvasCrop(c1,rect){var c2=document.createElement('canvas');c2.width=rect.wd;c2.height=rect.ht;var g2=c2.getContext("2d");g2.drawImage(c1,rect.left,rect.top,rect.wd,rect.ht,0,0,rect.wd,rect.ht);return c2;} function canvasSave(typ){typ=(typ==undefined)?'png':typ;if(typ=='jpg')typ='jpeg';canID="canvas1";if(netQ)canID="canvas2";var can=document.getElementById(canID);var rect=canvasGetExtents(can);can=canvasCrop(can,rect);var dataUrl=can.toDataURL('image/'+typ);var win=window.open();win.document.write("");win.document.location="#";} function canvasPrint(){canID="canvas1";if(netQ)canID="canvas2";var can=document.getElementById(canID);var rect=canvasGetExtents(can);can=canvasCrop(can,rect);var dataUrl=can.toDataURL('image/png');var win=window.open();win.document.write("");win.document.location="#";win.setTimeout(function(){win.focus();win.print();},500);} function getQueryVariable(variable){var query=window.location.search.substring(1);var vars=query.split("&");for(var i=0;i