裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

算額(その1291)

2024年09月14日 | Julia

算額(その1291)

百四十一 群馬県藤岡市鮎川 北野神社 明治24年(1891)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円1個,直角三角形,正方形

直角三角形と,その鈎(直角を挟む 2 辺のうち,短い方)を共有する正方形で区分される領域に黄円を描く。弦(直角三角形の斜辺)の長さが 6.5 寸のとき,黄円が最大になるのは鈎がどれほどのときか。

鈎が 0 に近づく場合,黄円の直径も 0 に近づく。鈎が「弦/√2」 に近づく場合,黄円の直径も 0 に近づく。両者の中ほど(真ん中ではない)のときに黄円の直径が最も大きくなる。

計算の都合上,左右反転させて図を描く。
鈎(正方形の一辺のながさ)を「鈎」
黄円の半径と中心座標を r, (a + r, 0)
股(直角を挟む 2 辺のうち,長い方)を「股」
弦を「弦」
正方形の辺と弦の交点座標を (a, c)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms 鈎::positive, 股::positive, 弦::positive,
     a::positive, c::positive, r::positive;
a = 鈎
eq1 = 鈎^2 + 股^2 - 弦^2
eq2 = c*股 - 鈎*(股 - a)
eq3 = (股 - a) + c - 弦*c/a - r
eq4 = dist2(股, 0, 0, 鈎, a + r, r, r)
res = solve([eq1, eq2, eq4], (r, 股, c))[1]

   ((-弦*sqrt(弦^2 - 鈎^2)*sqrt(弦^4 - 弦^2*鈎^2 - 2*弦^2*鈎*sqrt(弦^2 - 鈎^2) + 2*鈎^3*sqrt(弦^2 - 鈎^2)) + (弦^2 - 2*鈎^2)*(弦^2 - 鈎^2))/(2*(弦^2 - 鈎^2)^(3/2)), sqrt(弦^2 - 鈎^2), -鈎^2/sqrt(弦^2 - 鈎^2) + 鈎)

黄円の半径 r は,r = ((-弦*sqrt(弦^2 - 鈎^2)*sqrt(弦^4 - 弦^2*鈎^2 - 2*弦^2*鈎*sqrt(弦^2 - 鈎^2) + 2*鈎^3*sqrt(弦^2 - 鈎^2)) + (弦^2 - 2*鈎^2)*(弦^2 - 鈎^2))/(2*(弦^2 - 鈎^2)^(3/2)), sqrt(弦^2 - 鈎^2), -鈎^2/sqrt(弦^2 - 鈎^2) + 鈎) と表すことができる。

弦が 6.5 のとき,鈎と黄円の半径の関係は下図のようである。鈎が 2 〜 3 の範囲で黄円の半径 r が最大になる。

using Plots
pyplot(size=(300, 200), grid=false, aspectratio=:none, label="")
plot(res[1](弦 => 6.5), xlims=(0, 6.5/√2), xlabel="鈎", ylabel="r")
hline!([0])

黄円の半径が最大になるときの鈎の値を求めるには,r の式において,鈎で微分した導関数の値が 0 になるときの鈎の値を求めればよい。

solve(diff(res[1], 鈎), 鈎)[1] |> println

   弦*(-1/2 + sqrt(3)/2)

鈎が 弦*(√3 - 1)/2 のとき,黄円の半径(直径)は最大値を取る。
弦が 6.5 寸の場合には,鈎 = 6.5*(√3 - 1)/2 = 2.3791651245988508 のとき,半径 r は最大値 0.584868958605704 になる。
直径は 1.16973791721141 である。

res[1](弦 => 6.5, 鈎 => 2.3791651245988508) |> println
2res[1](弦 => 6.5, 鈎 => 2.3791651245988508) |> println

   0.584868958605704
   1.16973791721141

function draw(弦, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = 鈎 = 弦*(√3 - 1)/2
   (r, 股, c) = ((-弦*sqrt(弦^2 - 鈎^2)*sqrt(弦^4 - 弦^2*鈎^2 - 2*弦^2*鈎*sqrt(弦^2 - 鈎^2) + 2*鈎^3*sqrt(弦^2 - 鈎^2)) + (弦^2 - 2*鈎^2)*(弦^2 - 鈎^2))/(2*(弦^2 - 鈎^2)^(3/2)), sqrt(弦^2 - 鈎^2), -鈎^2/sqrt(弦^2 - 鈎^2) + 鈎)
   @printf("弦(斜線)の長さが %g のとき,鈎(正方形の一辺の長さ)が %g のときに黄円の直径が最大値 %g になる。\n", 弦, 鈎, 2r)
   plot([0, a, a, 0, 0], [0, 0, a, a], color=:green, lw=0.5)
   circle(a + r, r, r)
   segment(0, 鈎, 股, 0, :blue)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:gray80, lw=0.5)
       vline!([0], color=:gray80, lw=0.5)
       point(0, a, "a ", :green, :right, :bottom, delta=3delta)
       point(a, a, "(a,a)", :green, :right, :bottom, delta=delta)
       point(a, 0, "a", :green, :center, delta=-2delta)
       point(股, 0, "股", :blue, :center, delta=-2delta)
       point(a + r, r, "黄円:r\n(a+r,r)", :red, :center, delta=-2delta)
       δ = 3delta
       dimension_line(2delta, 鈎 + 3delta, 股 + 2delta, 3delta, "弦", delta=3delta, deltax=3delta)
       dimension_line(-4delta, 0, -4delta, 鈎, "鈎", deltax=-4delta)
       plot!(xlims=(-15delta, 股 + 3delta), ylims=(-9delta, 鈎 + 3delta))
   end  
end;

draw(6.5, true)


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1290) | トップ | 算額(その1292) »
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事