裏 RjpWiki

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

算額(その1403)

2024年11月15日 | Julia

算額(その1403)

三十二 一関市舞川 観福寺内地蔵堂 明治43年(1901)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市. http://www.wasan.jp/yamamura/yamamura.html
キーワード:円2個,直角三角形4個,等脚台形
#Julia, #SymPy, #算額, #和算

合同な直角三角形 4 個を組み合わせて等脚台形を作り,大円と小円を容れる。小円の直径が与えられたときに大円の直径を求める術を述べよ。

最初にいっておく。本問は条件不足であり,解けない。

できる台形の上底,下底,高さを a, 3a, b
大円の半径と中心座標を r1, (a, r1)
小円の半径と中心座標を r2, (2a - r2, b - r2)
とおく。

条件が不足しているので,小円の直径 r2 の他に台形の高さ b も与えられるものとして方程式を解く。

include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf

@syms a::positive, b::positive, r1::positive, r2::positive
eq1 = a + b - sqrt(a^2 + b^2) - 2r2
eq2 = r1/(b - r1) - a/sqrt(a^2 + b^2)
res = solve([eq1, eq2], (r1, a))[1];

ans_r1 = res[1]
ans_r1 |> println
ans_r1(r2 => 1/2, b => 2) |> println

   2*b*r2*(b - r2)*Abs(b - 2*r2)/(b*sqrt(b^2*(b - 2*r2)^2 + 4*r2^2*(b - r2)^2) + 2*r2*(b - r2)*Abs(b - 2*r2) - 2*r2*sqrt(b^2*(b - 2*r2)^2 + 4*r2^2*(b - r2)^2))
   0.750000000000000

ans_r1 は b > 2r2 を仮定して,以下のように簡約化できる。

ans_r1_ = 2r2*(b - r2)/b
ans_r1_ |> println

   2*r2*(b - r2)/b

ans_a も以下のようになる。

ans_a = res[2]
ans_a |> println

   2*r2*(b - r2)/(b - 2*r2)

術では「41 の平方根から 5 を引いて,小円の直径を掛ければ,大円の直径が得られる」としいているが,小円の直径が同じでも台形の高さが変われば大円の直径も変わる。一律に (√41 - 5) 倍すればよいわけではない。

r1 = 1/2 * (√41 - 5 ) = 0.7015621187164243 であるが,それは b ≒ 1.67539 のときだけである。

ans_r1_(r2 => 1/2, b => 1.67539) |> println

   0.701562024364476

ans_r1_(r2 => 1/2, b => 2) |> println

   0.545454545454546
   0.750000000000000

結論:本問は条件不足で解けない。大円の直径は小円の直径だけでは決まらない。台形の高さの条件が必要である。

function draw(r2, b, more)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 2r2*(b - r2)/b
   a  = 2r2*(b - r2)/(b - 2r2)
   println(b, " ", r1/r2) 
   @printf("r2 = %g;  r1 = %g;  factor = r1/r2 = %g;  a = %g;  b = %g\n", r2, r1, r1/r2, a, b)
   plot([2a, 2a, a, 0, 3a, 2a, a, a],
        [b, 0, b, 0, 0, b, b, 0], color=:green, lw=0.5)
   circle(a, r1, r1)
   circle(2a - r2, b - r2, r2, :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(a, r1, "大円:r1,(a,r1)", :red, :center, delta=-delta)
       point(2a - r2, b - r2, "小円:r2\n(2a-r2,b-r2)", :blue, :center, delta=-delta)
       point(a, 0, "a", :green, :center, delta=-3delta)
       point(2a, 0, "2a", :green, :center, delta=-3delta)
       point(3a, 0, "3a", :green, :center, delta=-3delta)
       point(a, b, "(a,b)", :green, :left, :bottom, delta=delta/2)
       point(2.1a, 0.8r1, "r2 = $r2\nb = $b\nr1 = $(round(r1, digits=5))", :black, :left, mark=false)
   end
end;

draw(1/2, 1.67539, true)


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

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Julia」カテゴリの最新記事