円に4辺が外接する凸四角形
図形問題出題するよ。図のように、円に外接する凸四角形ABCDがあり、AB=9cm、BC=10cm、CD=7cmのとき、以下の問いに答えよ。1) AD=Xcmを求めよ。2) ∠βの取りうる範囲を示せ。3) 内接円の面積が最大になるようなアルゴリズムを考えよ。シンキングタ~イム1) これは簡単ですね。各頂点から接点までの距離が頂点ごとにそれぞれ等しいので、X=9+7-10=6答え 6cm2) これは余弦定理を使う必要があるので、高校生以上ならば理解出来るかと思う。凸四角形の形を保てなくなる、つまり三角形になってしまうということです。βmin=acos((102+(9+6)2-72)/(2・10・(9+6)))=acos(23/25)≒23.07392˚βmax=acos((102+92-(6+7)2)/(2・10・9))=acos(1/15)≒86.17745˚答え acos(23/25)<β<acos(1/15)3) βの下限・上限が解ったので、円の半径について二分法を使えば良い。以下、Javascriptで核心部分を記述する。ab = 9;bc = 10;cd = 7;da = 6;bx = 0;by = cy = 0;cx = bx+bc;radius_max = 0;angle_b_max = Math.acos(23/25);angle_b_min = Math.acos(1/15);for (i=0; i<100; i++) { angle_b = (angle_b_max+angle_b_min)/2; ax = bx+ab*Math.cos(anlge_b); ay = by-ab*Math.sin(angle_b); ac = Math.sqrt((cx-ax)*(cx-ax)+(cy-ay)*(cy-ay)); angle_c = Math.atan2(cy-ay,cx-ax)+Math.acos((ac*ac+cd*cd-da*da)/(2*ac*cd)); radius= bc*Math.tan(angle_b/2)*Math.atan(angle_c/2)/(Math.tan(angle_b/2)+Math.atan(angle_c/2)); if ( radius > radius_max) { radius_max = radius; angle_b_min = angle_b; } else { angle_b_max = angle_b; }}dx = cx-cd*Math.cos(angle_c);dy = cy-cd*Math.sin(angle_c);ox = bx+radius_max/Math.tan(angle_b/2);oy = by-radius_max;ctx.beginPath();ctx.moveTo(ax,ay);ctx.lineTo(bx,by);ctx.lineTo(cx,cy);ctx.lineTo(dx,dy);ctx.closePath();ctx.stroke();ctx.beginPath();ctx.arc(ox,oy,radius_max,0,2*Math.PI,true);ctx.stroke();まぁ、ざっくりとだが、こんな感じで良いだろう。私がアップしている図形問題は、こんな感じで描かれているということです。ではではPS:数学が出来ることと、プログラミングが出来ること、絵が描けること、生成AIの時代、計算はコンピュータに任せれば良くて、立式やプログラミングは人間の仕事だと思ってはいる。でも、AIにコードを書かせることも普通に出来てしまう時代ではあるが、私はまだ自分でコードを書いているし、AIにやらせようとまでは思ってはいない。自分の伝えたいことを言葉で表現するか、絵や図で表現するか、…自分は美大とか芸大とか、芸術系に進みたかった思いがあったが、結果的に数学科へ進むことを選んだのが1986年、つまり今から40年も前の話しだ。当時はインターネットなんてものは規格はあったかもしれないが、まだまだで、当時は情報工学系の学科も、いくつかは設立はされてはいたのかもしれないが、いまいちピンときていなかったのと、数学の先生からの推薦もあってか、数学科に行くことになる。数学科にいても、プログラミング系の講義は必須科目にいくつかは存在はしていたが、あくまでも応用数学という位置づけであって、純粋数学が8割、応用数学が2割くらいの割合でしかなかったし、教授陣も古臭い技術を教えてくれるだけで、最新技術に触れるのは、むしろ独学の方であって、学生の方が最新技術に触れていたようにさえ思う。授業では、FOTRAN77、LISP、なんてのをやったが、結局独学でBASICやC言語を習得して、それがきっかけでコンピュータ系の職業を点々とすることになった。1994年くらいからインターネットの仕事をしていたってのもあって、HTMLはテキストエディタを開いて手書きで書いていたし、Javascriptの前身であるプログラミング言語も整ってきて、合わせて独学で習得していくこととなる。技術情報は書籍を頼ることもあったが、インターネット上で探しては知識を増やしていくこととなる。プログラミング言語ってのは、すべてを知ってから作り始めるのではなくて、作りたいものがあって、必要なところだけを随時学んでいくものだというのが、大学時代から体に染み付いていた。今ならば、生成AIの力を借りて、画像なんていくらでも作れるし、難しい計算の立式や計算もやってくれるだろう。まぁ、どこまで自分でやるかってのは、ずいぶんと変わっていくんだろうなとは思う。自分は出来るかぎり、その流れに逆らって行こうかなとは思ってはいる。それは、一番面白いと感じているところを、AIにやらせる気がないってことなんだ。ではではa img { background-color: lightgray;}table.renbun td { border: 0px; padding: 2px 2px 2px 2px; vertical-align: middle; white-space: nowrap; }table.renbun td.ul { border-style: solid; border-width: 0px 0px 1px 0px; }table.renbun td.ol { border-style: solid; border-width: 1px 0px 0px 0px; }table.ans td:nth-child(1) { text-align: center; }table.ans td div { width: 265px; overflow-x: scroll; }table.ans td div span { white-space: nowrap; }table.test td {white-space: nowrap;padding: 0 5px;text-align: right;} table.test .y {background-color: yellow;color: black; } .u {border-bottom-style: solid;border-bottom-width: 1px;text-align: center;}table#list td { padding: 0 2px; font-family: monospace; }.no { display:inline-block; text-align:center; vertical-align:middle;}.ni { display:inline-block; text-align:center; vertical-align:middle; line-height:100%;}.ns { font-family:serif; font-size:250%; line-height:100%;}.io { display:inline-block; white-space:nowrap;}.io sub { vertical-align:bottom; white-space:nowrap;}.io sup { vertical-align:top; white-space:nowrap;}.ii { display:inline-block; vertical-align:middle;}.is { vertical-align:middle; font-family:arial;// font-family: sans-serif; font-size:300%; line-height:70%; font-weight: 5;// margin: 0 -15px 0 -10px;}.ii2{ display:inline-block; line-height:100%; vertical-align:middle;}.is2{ line-height:155%;// line-height:109%; font-family:sans-serif;}.mo { display:inline-block; vertical-align:middle;}.mi { display:inline-block; white-space:nowrap; vertical-align:middle; line-height:100%;}html:not([lang]) .mp { display:inline-block; line-height:100%; font-size:120%; font-family:sans-serif; margin: 0; padding: 0;}.mp{ display:inline-block; line-height:100%; font-size:120%; font-family:serif; margin: 0; padding: 0;}.md{ display:inline-block; line-height:120%; text-align:right; margin: 0 5px;}.lo { display:inline-block; text-align:center; vertical-align:middle;}.li { display:inline-block; text-align:center; vertical-align:middle; line-height:100%; margin: 0 5px 0 0;}.ls { font-family:serif; font-size:120%; line-height:100%;}.fb {border-style:solid;border-width:1px 0 0 0;margin:1px 0;}.fo {display:inline-block;text-align:center;vertical-align:middle;white-space: nowrap;}.fo span {margin: 0 3px;}.fo span span {margin: 0 0;}.article table {white-space: nowrap;}.ro{display:inline-block;white-space:nowrap;line-height:100%;position:static;}.rt{font-family: 'Meiryo', 'YuGothic', 'Gothic', sans-serif;}.ri{display:inherit;border-style:solid;border-width:1px 0 0 0;padding:0 1px 0 1px;margin:1px 0 0 0;position:relative; left:-1.5px;}article table {margin-bottom: 0 !important;}article table td {white-space: nowrap;text-align: center;}