(function(){var a,b,c,d,cmt='テスト';if ( window.location.search ){var p = window.location.search.substr(1).split(String.fromCharCode(0x26));var q = new Object();for (var i=0; p.length-i!=0; i++) {var r = p[i].split('=');q[r[0]] = parseInt(r[1]);}a = q['a'];b = q['b'];c = q['c'];d = q['d'];} else {/*switch ( Math.floor(Math.random()*4) ) {*/switch ( 7 ) {case 0:a = Math.floor(Math.random()*7)*10+20;b = 180-2*a;c = d = Math.floor(Math.random()*(a/10-1))*10+10;break;case 1:a = Math.floor(Math.random()*7)*10+10;d = 2*a;c = (180-d)/2;b = Math.floor(Math.random()*(c/10-1))*10+10;break;case 2:d = Math.floor(Math.random()*7)*10+10;a = 2*d;b = (180-a)/2;c = Math.floor(Math.random()*(b/10-1))*10+10;break;case 3:d = Math.floor(Math.random()*7)*10+20;c = 180-2*d;a = b = Math.floor(Math.random()*(d/10-1))*10+10;break;case 4:c = d = Math.floor(Math.random()*2)*10+10;b = 60-c;a = 180-2*b;break;case 5:d = Math.floor(Math.random()*2)*10+40;c = 180-2*d;b = 120-c;a = b/2;break;case 6:a = Math.floor(Math.random()*2)*10+40;b = 180-2*a;c = 120-b;d = c/2;break;case 7:a = b = Math.floor(Math.random()*2)*10+10;c = 60-a;d = 180-2*c;break;}}var e = Math.tan(c/180.0*Math.PI)/(Math.tan((a+b)/180.0*Math.PI)+Math.tan(c/180.0*Math.PI));var f = Math.tan(b/180.0*Math.PI)/(Math.tan((d+c)/180.0*Math.PI)+Math.tan(b/180.0*Math.PI));var g = e*Math.tan((a+b)/180.0*Math.PI);var h = f*Math.tan((d+c)/180.0*Math.PI);var x;var t=1;var cvs = document.getElementById('cvs');var ctx = cvs.getContext('2d');ctx.beginPath();ctx.clearRect(0,0,500,500);ctx.closePath();if ( Math.min(a+b+c,180)==180 || Math.min(b+c+d,180)==180 ){cmt = '図形を描けません
';cmt += 'α=∠ABD='+a+'˚
β=∠DBC='+b+'˚
γ=∠ACB='+c+'˚
δ=∠DCA='+d+'˚
θ=∠ADBを求めよ。
';} else {w = 1;if ( Math.max(e,0)==0 ){if ( Math.max(f,1-e)==f ) w = f;else w += -e;}if ( Math.max(f,0)==0 ){if ( Math.max(e,1-f)==e ) w = e;else w += -f;}var z = 300/Math.max(Math.max(h,g),w);var sx, bx, cx, dx;if ( w==1 ){bx = 250-(z*w/2);cx = 250+(z*w/2);} else if ( w==e || w==1-f ){bx = 250-(z*w/2);cx = bx+z;} else if ( w==f || w==1-e ){cx = 250+(z*w/2);bx = cx-z;} else if ( w==1-e-f ){bx = 250-(z*w/2)-z*e;cx = 250+(z*w/2)+z*f;}dx = cx - z*f;ax = bx + z*e;var by = 500-((500-z*Math.max(h,g))/2);var cy = 500-((500-z*Math.max(h,g))/2);var dy = 500-((500-z*Math.max(h,g))/2)-z*h;var ay = 500-((500-z*Math.max(h,g))/2)-z*g;var col;eval('col = document.defaultView.getComputedS'+'tyle(document.getElementById(\'inner\'),\'\').color;');eval('ctx.strokeS'+'tyle = col;');eval('ctx.fillS'+'tyle = col');var fs,ff;eval('fs = document.defaultView.getComputedS'+'tyle(document.getElementById(\'inner\'),\'\').fontSize;');eval('ff = document.defaultView.getComputedS'+'tyle(document.getElementById(\'inner\'),\'\').fontFamily;');ctx.font = fs+' '+ff;ctx.textAlign = 'center';ctx.textBaseline = 'middle';cmt = 'α=∠ABD='+a+'˚
β=∠DBC='+b+'˚
γ=∠ACB='+c+'˚
δ=∠DCA='+d+'˚
θ=∠ADBを求めよ。
';if ( (c==d)*(2*a+b==180) ) {cmt += 'γ=δ、2α+β=180˚より、点Aは△BCDの傍心。
';cmt += '∴θ=(β+γ+δ)/2='+((b+c+d)/2)+'˚';var jr=Math.sqrt((bx-ax)*(bx-ax)+(by-ay)*(by-ay))*Math.sin(Math.PI*a/180.0);ctx.beginPath();ctx.arc(ax,ay,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.lineJoin = 'bevel';var ja=Math.sqrt((cx-ax)*(cx-ax)+(cy-ay)*(cy-ay));var jd=Math.sqrt((cx-dx)*(cx-dx)+(cy-dy)*(cy-dy));var jb=Math.sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by));ctx.beginPath();ctx.moveTo(dx,dy);ctx.lineTo(dx-(ja-jd+50)*Math.cos(Math.PI*(c+d)/180.0),dy-(ja-jd+50)*Math.sin(Math.PI*(c+d)/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.beginPath();ctx.moveTo(bx,by);ctx.lineTo(bx-(ja-jb+50)*Math.cos(Math.PI*0/180.0),by-(ja-jb+50)*Math.sin(Math.PI*0/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*((180-2*b+c+d)/4)/180.0),ay-12*Math.sin(Math.PI*((180-2*b+c+d)/4)/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*90.0/180.0),by+12*Math.sin(Math.PI*90.0/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*c/180.0),cy+12*Math.sin(Math.PI*c/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*(90-c-d)/180.0),dy-12*Math.sin(Math.PI*(90-c-d)/180.0));} else if ( (2*c+d==180)*(2*a==d) ) {cmt += '2α=δ、2γ+δ=180˚より、点Bは△ACDの傍心。
';cmt += '∴θ=180˚-β-γ-δ=γ-β='+(c-b)+'˚';var jr=Math.sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by))*Math.sin(Math.PI*c/180.0);ctx.beginPath();ctx.arc(bx,by,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.lineJoin = 'bevel';var ja=Math.sqrt((dx-ax)*(dx-ax)+(dy-ay)*(dy-ay));var jb=Math.sqrt((dx-bx)*(dx-bx)+(dy-by)*(dy-by));var jc=Math.sqrt((dx-cx)*(dx-cx)+(dy-cy)*(dy-cy));ctx.beginPath();ctx.moveTo(ax,ay);ctx.lineTo(ax-(jb-ja+50)*Math.cos(Math.PI*(c-(180-2*(180-a-b-c)))/180.0),ay-(jb-ja+50)*Math.sin(Math.PI*(c-(180-2*(180-a-b-c)))/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.beginPath();ctx.moveTo(cx,cy);ctx.lineTo(cx-(jb-jc+50)*Math.cos(Math.PI*(-c)/180.0),cy-(jb-jc+50)*Math.sin(Math.PI*(-c)/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*(270-2*b-c-d)/180.0),ay-12*Math.sin(Math.PI*(270-2*b-c-d)/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*((a+b)/2)/180.0),by+12*Math.sin(Math.PI*((a+b)/2)/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*(90-c)/180.0),cy+12*Math.sin(Math.PI*(90-c)/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*b/180.0),dy-12*Math.sin(Math.PI*b/180.0));} else if ( (2*b+a==180)*(2*d==a) ) {cmt += '2δ=α、α+2β=180˚より、点Cは△ABDの傍心。
';cmt += '∴θ=180˚-2(180˚-β-γ-δ)=2γ='+(2*c)+'˚';var jr=Math.sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by))*Math.sin(Math.PI*b/180.0);ctx.beginPath();ctx.arc(cx,cy,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.lineJoin = 'bevel';var jb=Math.sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));var jc=Math.sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy));var jd=Math.sqrt((ax-dx)*(ax-dx)+(ay-dy)*(ay-dy));ctx.beginPath();ctx.moveTo(dx,dy);ctx.lineTo(dx+(jc-jd+50)*Math.cos(Math.PI*(b-(180-2*(180-b-c-d)))/180.0),dy-(jc-jd+50)*Math.sin(Math.PI*(b-(180-2*(180-b-c-d)))/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.beginPath();ctx.moveTo(bx,by);ctx.lineTo(bx+(jc-jb+50)*Math.cos(Math.PI*(-b)/180.0),by-(jc-jb+50)*Math.sin(Math.PI*(-b)/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*c/180.0),ay-12*Math.sin(Math.PI*c/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*(90-b)/180.0),by+12*Math.sin(Math.PI*(90-b)/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*((c+d)/2)/180.0),cy+12*Math.sin(Math.PI*((c+d)/2)/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*(270-2*c-b-a)/180.0),dy-12*Math.sin(Math.PI*(270-2*c-b-a)/180.0));} else if ( (a==b)*(2*d+c==180) ) {cmt += 'α=β、2δ+γ=180˚より、点Dは△ABCの傍心。
';cmt += '∴θ=(β+γ+δ)/2='+((b+c+d)/2)+'˚';var jr=Math.sqrt((cx-dx)*(cx-dx)+(cy-dy)*(cy-dy))*Math.sin(Math.PI*d/180.0);ctx.beginPath();ctx.arc(dx,dy,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.lineJoin = 'bevel';var ja=Math.sqrt((bx-ax)*(bx-ax)+(by-ay)*(by-ay));var jd=Math.sqrt((bx-dx)*(bx-dx)+(by-dy)*(by-dy));var jc=Math.sqrt((bx-cx)*(bx-cx)+(by-cy)*(by-cy));ctx.beginPath();ctx.moveTo(ax,ay);ctx.lineTo(ax+(jd-ja+50)*Math.cos(Math.PI*(a+b)/180.0),ay-(jd-ja+50)*Math.sin(Math.PI*(a+b)/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.beginPath();ctx.moveTo(cx,cy);ctx.lineTo(cx+(jd-jc+50)*Math.cos(Math.PI*0/180.0),cy-(jd-jc+50)*Math.sin(Math.PI*0/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*(90-a-b)/180.0),ay-12*Math.sin(Math.PI*(90-a-b)/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*b/180.0),by+12*Math.sin(Math.PI*b/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*90.0/180.0),cy+12*Math.sin(Math.PI*90.0/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*((180-2*c+a+b)/4)/180.0),dy-12*Math.sin(Math.PI*((180-2*c+a+b)/4)/180.0));} else if ( (c==d)*(b+c==60)*(2*b+a==180) ) {cmt += '線分ACと線分DBの交点をEとする。
';cmt += '2β+α=180˚、∠BACの二等分線と線分BCとの交点をJとすると、点Jは△ABEの傍心。
';cmt += '□EJCDや□AJCDは直線ACで線対称な凧形。
';cmt += '∴θ=180˚-α-3(180˚-α-β-γ)/2=α/2='+(a/2)+'˚';var ey=(cx-bx)*Math.tan(Math.PI*b/180.0)*Math.tan(Math.PI*c/180.0)/(Math.tan(Math.PI*b/180.0)+Math.tan(Math.PI*c/180.0));var ex=ey/Math.tan(Math.PI*c/180.0);var ab=Math.sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));var ac=Math.sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy));var jx=(ac/(ab+ac))*(cx-bx);var jy=0;var jr=jx*Math.sin(Math.PI*c/180.0);ctx.beginPath();ctx.arc(cx-jx,cy-jy,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.lineJoin = 'bevel';ctx.beginPath();ctx.moveTo(ax,ay);ctx.lineTo(cx-jx,cy-jy);ctx.lineTo(cx-ex,cy-ey);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();var aj=Math.sqrt((ax-cx+jx)*(ax-cx+jx)+(ay-cy)*(ay-cy));ctx.beginPath();ctx.moveTo(bx,by);ctx.lineTo(bx-(aj-ab+50)*Math.cos(Math.PI*(a+b)/180.0),by+(aj-ab+50)*Math.sin(Math.PI*(a+b)/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*(c+(180-a-b-c)/4)/180.0),ay-12*Math.sin(Math.PI*(c+(180-a-b-c)/4)/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*(a+b-90)/180.0),by+12*Math.sin(Math.PI*(a+b-90)/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*c/180.0),cy+12*Math.sin(Math.PI*c/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*(5*d+2*b-105)/180.0),dy-12*Math.sin(Math.PI*(5*d+2*b-105)/180.0));} else if ( (2*a==b)*(b+c==120)*(c+2*d==180) ) {cmt += '線分ACと線分DBの交点をEとする。
';cmt += 'γ+2δ=180˚、βの二等分線と線分DCの交点をJとすると、点Jは△BCEの傍心。
';cmt += '□BFDAや□EFDAは直線BDで線対称な凧形。
';cmt += '∴θ=180˚-β-γ-δ=δ-β='+(d-b)+'˚';var ey=(cx-bx)*Math.tan(Math.PI*b/180.0)*Math.tan(Math.PI*c/180.0)/(Math.tan(Math.PI*b/180.0)+Math.tan(Math.PI*c/180.0));var ex=ey/Math.tan(Math.PI*b/180.0);var jx=Math.sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by))*Math.cos(Math.PI*a/180.0);var jy=Math.sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by))*Math.sin(Math.PI*a/180.0);ctx.lineJoin = 'bevel';ctx.beginPath();ctx.moveTo(bx+ex,by-ey);ctx.lineTo(bx+jx,by-jy);ctx.lineTo(bx,by);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();var jr=jy;ctx.beginPath();ctx.arc(bx+jx,by-jy,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();var jb=Math.sqrt(jx*jx+jy*jy);ctx.beginPath();ctx.moveTo(cx,cy);ctx.lineTo(cx+(jb-cx+bx+50),cy);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*((180-a-3*b+d)/2)/180.0),ay-12*Math.sin(Math.PI*((180-a-3*b+d)/2)/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*((a+b)/2)/180.0),by+12*Math.sin(Math.PI*((a+b)/2)/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*90.0/180.0),cy+12*Math.sin(Math.PI*90.0/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*b/180.0),dy-12*Math.sin(Math.PI*b/180.0));} else if ( (2*d==c)*(b+c==120)*(b+2*a==180) ) {cmt += '線分ACと線分DBの交点をEとする。
';cmt += 'β+2α=180˚、γの二等分線と線分ABの交点をJとすると、点Jは△EBCの傍心。
';cmt += '□AJEDや□AJCDは直線ADで線対称な凧形。
';cmt += '∴θ=180˚-α-2(180˚-α-β-γ)=α+60˚='+(a+60)+'˚';var ey=(cx-bx)*Math.tan(Math.PI*b/180.0)*Math.tan(Math.PI*c/180.0)/(Math.tan(Math.PI*b/180.0)+Math.tan(Math.PI*c/180.0));var ex=ey/Math.tan(Math.PI*c/180.0);var jx=Math.sqrt((dx-cx)*(dx-cx)+(dy-cy)*(dy-cy))*Math.cos(Math.PI*d/180.0);var jy=Math.sqrt((dx-cx)*(dx-cx)+(dy-cy)*(dy-cy))*Math.sin(Math.PI*d/180.0);ctx.lineJoin = 'bevel';ctx.beginPath();ctx.moveTo(cx-ex,cy-ey);ctx.lineTo(cx-jx,cy-jy);ctx.lineTo(cx,cy);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();var jr=jy;ctx.beginPath();ctx.arc(cx-jx,cy-jy,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();var jc=Math.sqrt(jx*jx+jy*jy);ctx.beginPath();ctx.moveTo(bx,by);ctx.lineTo(bx-(jc-cx+bx+50),cy);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*c/180.0),ay-12*Math.sin(Math.PI*c/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*90.0/180.0),by+12*Math.sin(Math.PI*90.0/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*((c+d)/2)/180.0),cy+12*Math.sin(Math.PI*((c+d)/2)/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*((180-d-3*c+a)/2)/180.0),dy-12*Math.sin(Math.PI*((180-d-3*c+a)/2)/180.0));} else if ( (a==b)*(b+c==60)*(2*c+d==180) ) {cmt += '線分ACと線分DBの交点をEとする。
';cmt += '2γ+δ=180˚、∠BDCの二等分線と線分BCとの交点をJとすると、点Jは△ECDの傍心。
';cmt += '□EABJや□DABJは直線DBで線対称な凧形。
';cmt += '∴θ=(180˚-β-γ-δ)/2=γ-30˚='+(c-30)+'˚';var ey=(cx-bx)*Math.tan(Math.PI*b/180.0)*Math.tan(Math.PI*c/180.0)/(Math.tan(Math.PI*b/180.0)+Math.tan(Math.PI*c/180.0));var ex=ey/Math.tan(Math.PI*b/180.0);var db=Math.sqrt((dx-bx)*(dx-bx)+(dy-by)*(dy-by));var dc=Math.sqrt((dx-cx)*(dx-cx)+(dy-cy)*(dy-cy));var jx=(db/(db+dc))*(cx-bx);var jy=0;var jr=jx*Math.sin(Math.PI*b/180.0);ctx.beginPath();ctx.arc(bx+jx,by-jy,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.lineJoin = 'bevel';ctx.beginPath();ctx.moveTo(dx,dy);ctx.lineTo(bx+jx,by-jy);ctx.lineTo(bx+ex,by-ey);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();var dj=Math.sqrt((dx-bx-jx)*(dx-bx-jx)+(dy-by)*(dy-by));ctx.beginPath();ctx.moveTo(cx,cy);ctx.lineTo(cx+(dj-dc+50)*Math.cos(Math.PI*(c+d)/180.0),cy+(dj-dc+50)*Math.sin(Math.PI*(c+d)/180.0));ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.fillText('A',ax-12*Math.cos(Math.PI*(5*a+2*c-105)/180.0),ay-12*Math.sin(Math.PI*(5*a+2*c-105)/180.0));ctx.fillText('B',bx-12*Math.cos(Math.PI*b/180.0),by+12*Math.sin(Math.PI*b/180.0));ctx.fillText('C',cx+12*Math.cos(Math.PI*(c+d-90)/180.0),cy+12*Math.sin(Math.PI*(c+d-90)/180.0));ctx.fillText('D',dx+12*Math.cos(Math.PI*(b+(180-b-c-d)/4)/180.0),dy-12*Math.sin(Math.PI*(b+(180-b-c-d)/4)/180.0));} else if ( (a==b)*(b+c==120)*(d-b==30) ) {cmt += '';var jr=(cx-bx)*Math.sin(Math.PI*b/180.0);ctx.beginPath();ctx.arc(cx,cy,jr,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();} else {ctx.fillText('A',ax-12/Math.sqrt(2),ay-12/Math.sqrt(2));ctx.fillText('B',bx-12/Math.sqrt(2),by+12/Math.sqrt(2));ctx.fillText('C',cx+12/Math.sqrt(2),cy+12/Math.sqrt(2));ctx.fillText('D',dx+12/Math.sqrt(2),dy-12/Math.sqrt(2));ctx.lineJoin = 'miter';}ctx.beginPath();ctx.moveTo(bx,by);ctx.lineTo(cx,cy);ctx.lineTo(dx,dy);ctx.lineTo(ax,ay);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();ctx.beginPath();ctx.lineJoin = 'bevel';ctx.moveTo(bx,by);ctx.lineTo(dx,dy);ctx.lineWidth = 2.0;ctx.stroke();ctx.beginPath();ctx.lineJoin = 'bevel';ctx.moveTo(cx,cy);ctx.lineTo(ax,ay);ctx.lineWidth = 2.0;ctx.stroke();}document.getElementById('inner').innerHTML = cmt;})();
正しいパラメータを渡すとここに解説が表示されます。