(function(){var a,b,c,d,cmt='',test=-1;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'];test = q['test'];}if ( typeof a === 'undefined' || typeof b === 'undefined' || typeof c === 'undefined' || typeof d === 'undefined' ) {if ( test==-1 ) test = Math.floor(Math.random()*16);switch ( test ) {case 0:a = 30;b = Math.floor(Math.random()*5)*10+40;c = 120-b;d = 90-b;break;case 1:a = 30;d = Math.floor(Math.random()*5)*10+10;c = 2*d;b = 120-c;break;case 2:b = c = 30;d = Math.floor(Math.random()*5)*10+40;a = 180-2*d;break;case 3:b = c = 30;a = Math.floor(Math.random()*5)*10+40;d = 180-2*a;break;case 4:d = 30;c = Math.floor(Math.random()*5)*10+40;b = 120-c;a = 90-c;break;case 5:d = 30;a = Math.floor(Math.random()*5)*10+10;b = 2*a;c = 120-b;break;case 6:c = Math.floor(Math.random()*5)*10+10;b = 60-c;a = 90-c;d = 2*c;break;case 7:b = Math.floor(Math.random()*5)*10+10;c = 60-b;d = 90-b;a = 2*b;break;case 8:a = Math.floor(Math.random()*4)*10+20;c = d = 2*a-30;b = 150-a-c;break;case 9:b = 30;a = Math.floor(Math.random()*4)*10+70;d = 3*a-180;c = (180-d)/3;break;case 10:b = d = 30;a = Math.floor(Math.random()*4)*10+10;c = a+60;break;case 11:d = 30;c = Math.floor(Math.random()*4)*10+10;a = b = 90-2*c;break;case 12:a = c = 30;d = Math.floor(Math.random()*4)*10+10;b = d+60;break;case 13:c = 30;d = Math.floor(Math.random()*4)*10+70;a = 3*d-180;b = (180-a)/3;break;case 14:d = Math.floor(Math.random()*4)*10+20;a = b = 2*d-30;c = 150-b-d;break;case 15:a = 30;b = Math.floor(Math.random()*4)*10+10;c = d = 90-2*b;break;case 16:a = 30;b = Math.floor(Math.random()*2)*10+40;c = a+b;d = c-60;break;case 17:c = 30;a = Math.floor(Math.random()*2)*10+10;b = 60-2*a;d = (180-b)/2-c;break;case 18:c = Math.floor(Math.random()*2)*10+10;d = 60-2*c;b = 90+c;a = 360-3*b;break;case 19:b = Math.floor(Math.random()*2)*10+10;a = b+60;d = a+30;c = 180-2*b-d;break;case 20:b = Math.floor(Math.random()*2)*10+10;a = 60-2*b;c = b+90;d = 360-3*c;break;case 21:b = 30;d = Math.floor(Math.random()*2)*10+10;c = 60-2*d;a = (180-c)/2-b;break;case 22:d = 30;a = Math.floor(Math.random()*2)*10+10;b = a+60;c = b-d;break;case 23:c = Math.floor(Math.random()*2)*10+10;d = 60+c;a = d+30;b = 180-2*c-a;break;}}var lt=String.fromCharCode(0x3c),gt=String.fromCharCode(0x3e);document.getElementById('check').innerHTML = lt+'inp'+'ut type=\'checkbox\' id=\'line\''+gt+'補助線';function sin(s) {return Math.sin(Math.PI*s/180.0);}function cos(c) {return Math.cos(Math.PI*c/180.0);}function tan(t) {return Math.tan(Math.PI*t/180.0);}function pyth(x,y) {return Math.sqrt(x*x+y*y);}function height(a,b) {return tan(a)*tan(b)/(tan(a)+tan(b));}function arc(x,y,r) {if ( document.getElementById('line').checked ) {ctx.beginPath();ctx.arc(x,y,r,0,2*Math.PI,false);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();}}function line(x1,y1,x2,y2) {if ( document.getElementById('line').checked ) {ctx.beginPath();ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);ctx.closePath();ctx.lineWidth = 2.0;ctx.stroke();}}function text(a1,b1,c1,d1) {var a2,b2,c2,d2;var ad=Math.atan2(ay-dy,ax-dx)*180/Math.PI;var ab=Math.atan2(ay-by,ax-bx)*180/Math.PI;var ba=Math.atan2(by-ay,bx-ax)*180/Math.PI;var bc=Math.atan2(by-cy,bx-cx)*180/Math.PI;var cb=Math.atan2(cy-by,cx-bx)*180/Math.PI;var cd=Math.atan2(cy-dy,cx-dx)*180/Math.PI;var dc=Math.atan2(dy-cy,dx-cx)*180/Math.PI;var da=Math.atan2(dy-ay,dx-ax)*180/Math.PI;if ( Math.max(ad,0)!=0 ) {a2 = ab+(ad-ab)/2;} else {a2 = ab+(ad-ab)/2+180;}b2 = bc-(ba+bc)/2;c2 = cd+(cb-cd)/2;d2 = -da-(dc-da)/2;if ( a1==360 ) a1=a2;if ( b1==360 ) b1=b2;if ( c1==360 ) c1=c2;if ( d1==360 ) d1=d2;if ( document.getElementById('line').checked ) {ctx.fillText('A',ax-12*cos(a1),ay-12*sin(a1));ctx.fillText('B',bx-12*cos(b1),by+12*sin(b1));ctx.fillText('C',cx+12*cos(c1),cy+12*sin(c1));ctx.fillText('D',dx+12*cos(d1),dy-12*sin(d1));} else {ctx.fillText('A',ax-12*cos(a2),ay-12*sin(a2));ctx.fillText('B',bx-12*cos(b2),by+12*sin(b2));ctx.fillText('C',cx+12*cos(c2),cy+12*sin(c2));ctx.fillText('D',dx+12*cos(d2),dy-12*sin(d2));}}var cvs = document.getElementById('cvs');var ctx = cvs.getContext('2d');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 ax=0,ay=0,bx=0,by=0,cx=0,cy=0,dx=0,dy=0;function draw1() {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);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;ay = 500-((500-z*Math.max(h,g))/2)-z*g;by = 500-((500-z*Math.max(h,g))/2);cy = 500-((500-z*Math.max(h,g))/2);dy = 500-((500-z*Math.max(h,g))/2)-z*h;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';ctx.lineJoin = 'bevel';cmt = 'α=∠ABD='+a+'˚
β=∠DBC='+b+'˚
γ=∠ACB='+c+'˚
δ=∠DCA='+d+'˚
θ=∠ADBを求めよ。
';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();draw2();document.getElementById('inner').innerHTML = cmt;}}function draw2() {if ( (a==30)*(b+c==120)*((b+d==90)||(2*d==c)) ) {/* case 0-1 */cmt += '線分ABを底辺とし頂点Fを右側に持つ正三角形を描く。
';if ( b+d==90 ) {cmt += '∠BFC=∠BDCより、□DBCFは円に内接する。
';cmt += '∴θ=180˚-2γ='+(180-2*c)+'˚';} else if ( 2*d==c ) {cmt += '思考中…、□ACFDは円に内接する。
';cmt += '∴θ=(180˚-γ)/2=90˚-δ='+(90-d)+'˚';}var fx,fy;if ( b-a==0 ) {fy=0;fx=pyth(ax-bx,ay-by);} else {fy=(cx-bx)*height(b-a,2*c);fx=fy/tan(b-a);line(bx,by,bx+fx,by-fy);}line(ax,ay,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,360,c,b);} else if ( (b==30)*(c==30)*((a+2*d==180)||(2*a+d==180)) ) {/* case 2-3 */cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';if ( a+2*d==180 ) {cmt +='∠DFA+∠ACD=180˚より、□ACDFは円に内接する。
';cmt += '∴θ=90˚-δ='+(90-d)+'˚';} else if ( 2*a+d==180 ) {cmt +='∠DFA+∠ABD=180˚より、□ABDFは円に内接する。
';cmt += '∴θ=α-30˚='+(a-30)+'˚';}var fx=(cx-bx)/2;var fy=fx*Math.sqrt(3);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(c,360,360,b);} else if ( (d==30)*(b+c==120)*((c+a==90)||(2*a==b)) ) {/* case 4-5 */cmt += '線分CDを底辺とし頂点Fを左側に持つ正三角形を描く。
';if ( c+a==90 ) {cmt += '∠BFC=∠BACより、□AFBDが円に内接する。
';} else if ( 2*a==b ) {cmt += '思考中…、□AFBDが円に内接する。
';}var fx,fy;if ( c-d==0 ) {fy=0;fx=pyth(dx-cx,dy-cy);} else {fy=(cx-bx)*height(2*b,c-d);fx=fy/tan(c-d);line(cx,cy,cx-fx,cy-fy);}line(ax,ay,cx-fx,cy-fy);line(bx,by,cx-fx,cy-fy);line(dx,dy,cx-fx,cy-fy);text(c,b,360,360);} else if ( (b+c==60)*(((a+c==90)*(d==2*c))||((d+b==90)*(a==2*b))) ) {/* case 6-7 */cmt += '線分ADを底辺とし頂点Fを下側に持つ正三角形を描く。
';if ( d==2*c ) {cmt += '∠ABF+∠FCA=180˚より、□ABFCは円に内接する。
';cmt += '∴θ=α-β='+(a-b)+'˚';} else if ( a==2*b ) {cmt += '∠DBF+∠FCD=180˚より、□BFCDは円に内接する。
';cmt += '∴θ=δ-γ='+(d-cf)+'˚';}var fy=(cx-bx)*height(a-b,d-c);var fx=fy/tan(a-b);line(ax,ay,bx+fx,by+fy);line(bx,by,bx+fx,by+fy);line(cx,cy,bx+fx,by+fy);line(dx,dy,bx+fx,by+fy);text(360,b,c,360);} else if ( (c==d)*(a+b+c==150)*(d==2*a-30) ) {/* case 8 */cmt += '線分DC上の点Fを∠BAF=2∠BAC=60˚となるように取る。
';cmt += '△ABFは正三角形、∠FBD=∠FDBより、点Fは△ABDの外心。
';cmt += '∴θ=60˚/2=30˚';var fy=(cx-bx)*height(a+b-60,c+d);var fx=fy/tan(a+b-60);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);text(360,360,360,360);} else if ( (b==30)*(3*a-d==180)*(3*c+d==180) ) {/* case 9 */cmt += '線分BCを底辺とし頂点をFを上側に持つ正三角形を描く。
';cmt += '∠BAC=30˚より、点Fは△ABCの外心、□BCDFは線分BDで線対称な凧形。
';cmt += '∠AFB+∠BFC+∠CFD=180˚より、点Fは線分AD上に存在する。
';cmt += '∴θ=180˚-β-γ-δ='+(180-b-c-d)+'˚';var fx=(cx-bx)/2;var fy=fx*Math.sqrt(3);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);text(360,360,360,360);} else if ( (b==30)*(d==30)*(c-a==60) ) {/* case 10 */cmt += '線分DCを底辺とし頂点Fを左側に持つ正三角形を描く。
';cmt += 'β=30˚より、点Fは△BCDの外心、□AFCDは線分ACで線対称な凧形。
';cmt += '∠BFC+∠CFD+(90˚-∠BAC)=180˚より、点Fは線分AB上に存在する。
';cmt += '∴θ=α+β+γ-(180˚-β-γ)='+(a+b+c-(180-b-c))+'˚';var fy=(cx-bx)*height(a+b,c-d);var fx=fy/tan(a+b);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,360,360,360);} else if ( (d==30)*(a==b)*(a+2*c==90) ) {/* case 11 */cmt += '線分ADを底辺とし頂点Fを下側に持つ正三角形を描く。
';cmt += 'γ=30˚より、点Fは△ACDの外心。
';cmt += '180˚-∠AFD-∠DFC=90˚-βより、点Fは線分BC上に存在する。
';cmt += '∴θ=90˚-60˚=30˚';var fx=pyth(ax-bx,ay-by);var fy=0;line(ax,ay,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,360,360,360);} else if ( (c==30)*(a==30)*(b-d==60) ) {/* case 12 */cmt += '線分ABを底辺とし頂点Fを右側に持つ正三角形を描く。
';cmt += 'γ=30˚より、点Fは△ABCの外心。
';cmt += '180˚-∠AFB-∠BFC=90˚-∠BDCより、点Fは線分DC上に存在する。
';cmt += '∴θ=180˚-β-γ-δ='+(180-b-c-d)+'˚';var fy=(cx-bx)*height(c+d,b-a);var fx=fy/tan(c+d);line(bx,by,cx-fx,cy-fy);line(ax,ay,cx-fx,cy-fy);text(360,360,360,360);} else if ( (c==30)*(3*d-a==180)*(3*b+a==180) ) {/* case 13 */cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';cmt += '∠BDC=30˚より、点Fは△ABCの外心。
';cmt += '180˚-∠BFC-∠CFD=α+β-60˚より、点Fは線分AD上に存在する。
';cmt += '∴θ=60˚-β='+(60-b)+'˚';var fx=(cx-bx)/2;var fy=fx*Math.sqrt(3);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);text(360,360,360,360);} else if ( (a==b)*(b+c+d==150)*(a==2*d-30) ) {/* case 14 */cmt += '線分AB上の点Fを∠CDF=2∠CDB=60˚となるように取る。
';cmt += '△FCDは正三角形、∠FCA=∠FACより、点Fは△ACDの外心。
';cmt += '∴θ=(γ+δ)/2+30˚='+((c+d)/2+30)+'˚';var fy=(cx-bx)*height(d+c-60,b+a);var fx=fy/tan(d+c-60);line(cx,cy,cx-fx,cy-fy);line(dx,dy,cx-fx,cy-fy);text(360,360,360,360);} else if ( (a==30)*(c==d)*(d+2*b==90) ) {/* case 15 */cmt += '線分ADを底辺とし頂点Fを下側に持つ正三角形を描く。
';cmt += 'α=30˚より、点Fは△ABDの外心。
';cmt += '180˚-∠BFA-∠AFD=90˚-γより、点Fは線分BC上に存在する。
';cmt += '∴θ=60˚-β='+(60-b)+'˚';var fx=pyth(dx-cx,dy-cy);var fy=0;line(ax,ay,cx-fx,cy-fy);line(dx,dy,cx-fx,cy-fy);text(360,360,360,360);} else if ( (a==30)*(a+b==c)*(c-d==60) ) {/* case 16 */cmt += '線分ABを底辺とし頂点Fを右側に持つ正三角形を描く。
';cmt += '△ABCはAを頂角とする二等辺三角形より、点Aは△BCFの外心。
';cmt += 'α=30˚より、△DFAはDを頂角とする二等辺三角形、△DFA≡△DCA。
';cmt += '∴θ=180˚-α-(60˚-δ)=120˚-α+δ='+(b+c-d)+'˚';fy=pyth(ax-bx,ay-by)*sin(b-30);fx=pyth(ax-bx,ay-by)*cos(b-30);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(150-c,360,75,b);} else if ( (c==30)*(2*a+b==60)*((180-b)/2==c+d) ) {/* case 17 */cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';cmt += '△BCDはBを頂角とする二等辺三角形より、点Bは△FCDの外心。
';cmt += 'γ=30˚より、△AFBはAを頂角とする二等辺三角形、△AFB≡△ADB。
';cmt += '∴θ=α='+a+'˚';fx=(cx-bx)/2;fy=fx*Math.sqrt(3);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(c,30,360,(b+d)/2);} else if ( (a+3*b==360)*(b-c==90)*(2*c+d==60) ) {/* case 18 */cmt += '線分DCを底辺とし頂点Fを左側に持つ正三角形を描く。
';cmt += '∠BDC=30˚より、△BFCはBを頂角とする二等辺三角形。
';cmt += '△BAC≡△BFCより、点Cは△AFDの外心、△AFCは点Cを頂角とする二等辺三角形。
';cmt += 'CD=CA=CFより、点Cは△AFDの外心。
';cmt += '∴θ=(180˚-δ)/2-30˚='+((180-d)/2-30)+'˚';var fy=pyth(dx-cx,dy-cy)*sin(60-c-d);var fx=pyth(dx-cx,dy-cy)*cos(60-c-d);line(ax,ay,cx-fx,cy+fy);line(bx,by,cx-fx,cy+fy);line(cx,cy,cx-fx,cy+fy);line(dx,dy,cx-fx,cy+fy);text(2*c-15,b,c/2,360);} else if ( (a-b==60)*(2*b+c+d==180)*(d-a==30) ) {/* case 19 */cmt += '思考中…
';cmt += '∴θ=150˚-β-δ='+(150-b-d)+'˚';var fy=pyth(ax-dx,ay-dy)*sin(c+30);var fx=pyth(ax-dx,ay-dy)*cos(c+30);line(ax,ay,ax+fx,ay+fy);line(bx,by,ax+fx,ay+fy);line(cx,cy,ax+fx,ay+fy);line(dx,dy,ax+fx,ay+fy);text(360,2*b-15,c,3*b-30);} else if ( (d+3*c==360)*(c-b==90)*(2*b+a==60) ) {/* case 20 */cmt += '線分ABを底辺とし頂点Fを右側に持つ正三角形を描く。
';cmt += '∠BAC=30˚より、△CBFはCを頂角とする二等辺三角形。
';cmt += '△CBF≡△CBDより、点Cは△BFDの外心、△BFDは点Bを頂角とする二等辺三角形。
';cmt += 'BF=BD=BAより、点Bは△AFDの外心。
';cmt += '∴θ=(180˚-α)/2+β='+((180-a)/2+b)+'˚';fy=pyth(ax-bx,ay-by)*sin(a+b-60);fx=pyth(ax-bx,ay-by)*cos(a+b-60);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,30-b,c,15);} else if ( (b==30)*(2*d+c==60)*((180-c)/2==b+a) ) {/* case 21 */cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';cmt += '△ABCはCを頂角とする二等辺三角形より、点Cは△ABFの外心。
';cmt += 'β=30˚より、△DCFはDを頂角とする二等辺三角形、△DCF≡△DAC。
';cmt += '∴θ=(180˚-2δ)-(180˚-β-γ-δ)=β+γ-δ='+(b+c-d)+'˚';fx=(cx-bx)/2;fy=fx*Math.sqrt(3);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text((a+c)/2,360,30,b);} else if ( (d==30)*(c+d==b)*(b-a==60) ) {/* case 22 */cmt += '線分DCを底辺とし頂点Fを左側に持つ正三角形を描く。
';cmt += '△DBCはDを頂角とする二等辺三角形より、点Dは△FBCの外心。
';cmt += 'δ=30˚より、△AFDはAを頂角とする二等辺三角形、△AFD≡△ABD。
';cmt += 'θ=α='+a+'˚';fy=pyth(cx-dx,cy-dy)*sin(c+d-60);fx=pyth(cx-dx,cy-dy)*cos(c+d-60);line(ax,ay,cx-fx,cy-fy);line(bx,by,cx-fx,cy-fy);line(cx,cy,cx-fx,cy-fy);line(dx,dy,cx-fx,cy-fy);text(c,75,360,150-b);} else if ( (d-c==60)*(2*c+b+a==180)*(a-d==30) ) {/* case 23 */cmt += '思考中…
';cmt += '∴θ=30˚';var fy=pyth(ax-dx,ay-dy)*sin(b+30);var fx=pyth(ax-dx,ay-dy)*cos(b+30);line(ax,ay,dx-fx,dy+fy);line(bx,by,dx-fx,dy+fy);line(cx,cy,dx-fx,dy+fy);line(dx,dy,dx-fx,dy+fy);text(3*c-30,b,2*c-15,360);} else if ( (a==30)*(b+c==120)*(2*b+d==60) ) {cmt += '線分ABを底辺とし頂点Fを右側に持つ正三角形を描く。
';cmt += '思考中…
';cmt += '∴θ=β+90˚='+(b+90)+'˚';fy=pyth(ax-bx,ay-by)*sin(a+b-60);fx=pyth(ax-bx,ay-by)*cos(a+b-60);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(c,b,c,b);} else if ( (b==30)*(c==30)*(a+d==30) ) {cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';cmt += '思考中…
';cmt += 'θ=2α='+(2*a)+'˚';var fx=(cx-bx)/2;var fy=fx*Math.sqrt(3);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(c,b,c,b);} else if ( (d==30)*(b+c==120)*(2*c+a==60) ) {cmt += '線分DCを底辺とし頂点Fを左側に持つ正三角形を描く。
';cmt += '思考中…
';cmt += '∴θ=β-90˚'+(b-90)+'˚';fy=pyth(cx-dx,cy-dy)*sin(c+d-60);fx=pyth(cx-dx,cy-dy)*cos(c+d-60);line(ax,ay,cx-fx,cy-fy);line(bx,by,cx-fx,cy-fy);line(cx,cy,cx-fx,cy-fy);line(dx,dy,cx-fx,cy-fy);text(c,b,c,b);} else if ( (b+c==60)*(2*a+c==240)*(2*d+b==240) ) {cmt += '線分ADを底辺とし頂点Fを下側に持つ正三角形を描く。
';cmt += '思考中…
';cmt += '∴θ=30˚';var fx=pyth(ax-dx,ay-dy)*cos(c+30);var fy=pyth(ax-dx,ay-dy)*sin(c+30);line(ax,ay,ax+fx,ay+fy);line(bx,by,ax+fx,ay+fy);line(cx,cy,ax+fx,ay+fy);line(dx,dy,ax+fx,ay+fy);text(c,b,c,b);/*} else if ( (b==30)*(c==30)*(a+d==60) ) {} else if ( (d==30)*(a+c==60)*(b+c==120) ) {} else if ( (b+c==60)*(a+c==120)*(b+d==120) ) {} else if ( (a==30)*(b+d==60)*(b+c==120) ) {*/} else if ( (a==30)*(c==d)*(b+c==120) ) {cmt += '線分ABを底辺とし頂点Fを右側に持つ正三角形を描く。
';cmt += '□EBCFは線分ECで、□EFDAは線分EDで、それぞれ線対称な凧形。
';cmt += '∠DFA+∠AFB+∠BFC=180˚より、点Fは線分DC上に存在する。
';cmt += '∴θ=180˚-β-γ-δ='+(180-b-c-d)+'˚';var ey=(cx-bx)*height(b,c);var ex=ey/tan(b);var fy=(cx-bx)*height(b-30,c+d);var fx=fy/tan(b-30);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(bx+ex,by-ey,bx+fx,by-fy);text(360,360,360,360);} else if ( (b==30)*(c==30)*(a+d==180) ) {cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';cmt += '□EFABは線分EAで、□ECDFは線分EDで、それぞれ線対称な凧形。
';cmt += 'α+δ=180˚より、点Fは線分AD上に存在する。
';cmt += '∴θ=180˚-β-γ-δ='+(180-b-c-d)+'˚';var ex=(cx-bx)/2;var ey=ex/Math.sqrt(3);var fx=(cx-bx)/2;var fy=fx*Math.sqrt(3);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(bx+ex,by-ey,bx+fx,by-fy);text(360,360,360,360);} else if ( (d==30)*(a==b)*(b+c==120) ) {cmt += '線分DCを底辺とし頂点Fを左側に持つ正三角形を描く。
';cmt += '□EFDCは線分EBで、□EDAFは線分EAで、それぞれ線対称な凧形。
';cmt += '∠AFD+∠DFC+∠DFB=180˚より、点Fは線分AB上に存在する。
';cmt += '∴θ=180˚-γ='+(180-c)+'˚';var ey=(cx-bx)*height(b,c);var ex=ey/tan(c);var fy=(cx-bx)*height(a+b,c-30);var fx=fy/tan(c-30);line(cx,cy,cx-fx,cy-fy);line(dx,dy,cx-fx,cy-fy);line(cx-ex,cy-ey,cx-fx,cy-fy);text(360,360,360,360);} else if ( (a==b)*(c==d)*(b+c==60) ) {cmt += 'このパターンは正三角形を描いても解決しない。
';cmt += '線分ACと線分DBの交点をE、線分BAと線分CDの延長線上の交点をFとする。
';cmt += 'α=β、γ=δより、点Eは△FBCの内心。
';cmt += '∠BEC=120˚より、□FAEDは円に内接する。
';cmt += 'θ=60˚/2=30˚';var ey=(cx-bx)*height(b,c);var ex=ey/tan(b);var fy=(cx-bx)*height(a+b,c+d);var fx=fy/tan(a+b);line(ax,ay,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);line(bx+ex,by-ey,bx+fx,by-fy);arc(bx+ex,by-ey,ey);text(c+(180-a-b-c)-90,360,360,b+(180-b-c-d)-90);} else if ( (a==30)*(b+c==120)*(d==2*c) ) {cmt += '線分ABを底辺とし頂点Fを右側に持つ正三角形を描く。
';cmt += '点Fから線分DCへの垂線の足をG、線分ACと線分FBのH、線分DBと線分FAの交点をIとする。
';cmt += '□FHCGは線分FCで線対称な凧形、正三角形FABを挟んで反対側も条件は同じ。
';cmt += '∴θ=(180˚-β-γ-δ)/2='+((180-b-c-d)/2)+'˚';var fy=(cx-bx)*height(b-30,2*c);var fx=fy/tan(b-30);var gy=(cx-bx)*cos(c)*sin(c+d);var gx=(cx-bx)*cos(c)*cos(c+d);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);line(bx+fx,by-fy,cx-gx,cy-gy);text(360,360,360,360);} else if ( (b==30)*(c==30)*(a+d==210) ) {cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';cmt += '点Fから線分ADへの垂線の足をG、線分ACと線分FBの交点をH、線分DBと線分FCの交点をIとする。
';cmt += '2*(α-30˚)+60˚+*(δ-30˚)=360˚より、□FGAHは線分FA、□FGDIは線分FDで線対称な凧形。
';cmt += '∴θ=2(180˚-β-γ-δ)='+(2*(180-b-c-d))+'˚';var fx=(cx-bx)/2;var fy=fx*Math.sqrt(3);var gy=fx/tan(180-a-b-c)*sin(2*(180-a-b-c)-c);var gx=fx/tan(180-a-b-c)*cos(2*(180-a-b-c)-c);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);line(bx+fx,by-fy,ax+gx,ay-gy);text(360,360,360,360);} else if ( (d==30)*(b+c==120)*(a==2*b) ) {cmt += '線分CDを底辺とし頂点Fを左側に持つ正三角形を描く。
';cmt += '点Fから線分ABへの垂線の足をG、線分DBと線分FCのH、線分ACと線分FDの交点をIとする。
';cmt += '□FGBHは線分FBで線対称な凧形、正三角形FCDを挟んで反対側も条件は同じ。
';cmt += 'θ=90˚-(180˚-α-β-γ)+30˚=α+60˚='+(a+60)+'˚';var fy=(cx-bx)*height(2*b,c-30);var fx=fy/tan(2*b);var gy=(cx-bx)*cos(b)*sin(a+b);var gx=(cx-bx)*cos(b)*cos(a+b);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);line(bx+fx,by-fy,bx+gx,by-gy);text(360,360,360,360);} else if ( (a+d==30)*(2*a==b)*(2*d==c) ) {cmt += '線分ACと線分BDの交点をEとし、△EBCの内心をFとする。
';cmt += '360˚-2∠BFC=60˚より、△AFDは正三角形、□DABFは線分DBで線対称な凧形。
';cmt += '∴θ=60˚/2=30˚';var fy=(cx-bx)*height(a,d);var fx=fy/tan(a);var gx=fx;var gy=0;line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);line(bx+fx,by-fy,bx+gx,by-gy);arc(bx+fx,by-fy,fy);text(360,360,360,360);} else if ( (a==b+60)*(a+b+2*c==180)*(c+d==150) ) {cmt += '線分ABを底辺とし頂点Fを右側に描く。
';cmt += '△ABCは点Bを頂角とする二等辺三角形より、点Bは△ACFの外心。
';cmt += '□BCDFは線分BDで線対称な凧形、∠BFD+30˚=γ+δ+30˚=180˚より、△ABDは点Dを頂角とする二等辺三角形。
';cmt += 'θ=180˚-2α='+(180-2*a)+'˚';var fy=pyth(ax-bx,ay-by)*sin(a+b-60);var fx=pyth(ax-bx,ay-by)*cos(a+b-60);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,360,360,360);} else if ( (a+b==c)*(b+c==120)*(c-d==60) ) {cmt += '線分BCを底辺とし頂点Fを上側に持つ正三角形を描く。
';cmt += '三角形BCDは点Cを頂角とする二等辺三角形より、点Cは△FBDの外心。
';cmt += '□FCDAは線分CAで線対称な凧形、△ABCは点Aを頂角とする二等辺三角形。
';cmt += '∴θ=(360˚-60)/2-β=150˚-β'+(150-b)+'˚';var fx=(cx-bx)/2;var fy=fx*Math.sqrt(3);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,360,360,360);} else if ( (2*a==b)*(b+c==60)*(b+2*c+2*d==180) ) {cmt += '線分DCを底辺とし頂点Fを左側に持つ正三角形を描く。
';cmt += '思考中…
';cmt += '∴θ=γ='+c+'˚';var fy=(cx-bx)*height(b/2,c+d-60);var fx=fy/tan(b/2);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,360,360,360);} else if ( (a+b==150)*(b+c==120)*(d==2*c) ){ cmt += '線分ADを底辺とし頂点Fを下側に持つ正三角形を描く。
';var fy=(cx-bx)*height(90-c,2*c);var fx=fy/tan(90-c);line(ax,ay,bx+fx,by-fy);line(bx,by,bx+fx,by-fy);line(cx,cy,bx+fx,by-fy);line(dx,dy,bx+fx,by-fy);text(360,360,360,360);} else if ( (d==c+60)*(d+c+2*b==180)*(a+b==150) ) {cmt += 'b';} else if ( (c+d==150)*(b+c==120)*(a==2*b) ) {cmt += 'd';} else if ( (2*d==c)*(b+c==60)*(c+2*a+2*b==180) ) {cmt += 'f';} else if ( (c+d==b)*(b+c==120)*(b-a==60) ) {cmt += 'h';} else {text(360,360,360,360);}}onload=function() { draw1(); };onchange=function() { draw1(); };})();
正しいパラメータを渡すとここに解説が表示されます。