裏 RjpWiki

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

算額(その1382)

2024年11月01日 | Julia

算額(その1382)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円1個,直角三角形,菱形2個
#Julia, #SymPy, #算額, #和算

直角三角形の中に,菱形を 2 個容れる。また,菱形の交差部分に円を容れる。直角三角形の底辺(股)と高さ(鈎)が 4 寸と 3 寸のとき,円の直径はいかほどか。

鈎,股の 辺上にある菱形の頂点座標を (0, y1), (0, y2), (x1, 0), (x2, 0) とおき,以下の連立方程式を解く。

求める円は 直角三角形 (0, 0), (0, y1), (x1, 0) に内接する円と合同なので,その直径は x1 + y1 - sqrt(x1^2 + y1^2) である。

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

using SymPy

@syms 鈎::positive, 股::positive, x1::positive, y1::positive,
     x2::positive, y2::positive

eq1 = 鈎 - y1 - sqrt(x1^2 + y1^2)
eq2 = y1/x1 - 鈎/股
eq3 = 股 - x2 - sqrt(x2^2 + y2^2)
eq4 = y2/x2 - 鈎/股
res = solve([eq1, eq2, eq3, eq4], (x1, y1, x2, y2))[1]

   (股*鈎/(鈎 + sqrt(股^2 + 鈎^2)), 鈎^2/(鈎 + sqrt(股^2 + 鈎^2)), 股^2/(股 + sqrt(股^2 + 鈎^2)), 股*鈎/(股 + sqrt(股^2 + 鈎^2)))

鈎,股が 3 寸,4 寸のとき,円の直径は 3/4 = 0.75 寸である。

r = (res[1] + res[2] - sqrt(res[1]^2 + res[2]^2))/2 |> simplify;
r |> println
r(鈎 =>3, 股 => 4) |> println
r(鈎 =>3, 股 => 4) |> float |> println

   鈎*(股 + 鈎 - sqrt(股^2 + 鈎^2))/(2*(鈎 + sqrt(股^2 + 鈎^2)))
   3/8
   0.375

function draw(鈎, 股, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (x1, y1, x2, y2) = (股*鈎/(鈎 + sqrt(股^2 + 鈎^2)), 鈎^2/(鈎 + sqrt(股^2 + 鈎^2)), 股^2/(股 + sqrt(股^2 + 鈎^2)), 股*鈎/(股 + sqrt(股^2 + 鈎^2)))
   r = (x1 + y1 - sqrt(x1^2 + y1^2))/2
   @printf("鈎が %g,股が %g のとき,円の直径は %g である。\n", 鈎, 股, 2r)
   @printf("鈎 = %g;  股 = %g;  x1 = %g;  y1 = %g;  x2 = %g;  y2 = %g\n", 鈎, 股, x1, y1, x2, y2)
   plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:black, lw=0.5)
   circle(x1 - r, y2 - r, r)
   #segment(0, y1, x1, 0, :blue)
   #segment(x1, 0, x1, 鈎 - y1, :blue)
   plot!([0, x1, x1, 0, 0], [y1, 0, 鈎 - y1, 鈎, y1], color=:green, lw=1)
   #segment(0, y2, x2, 0, :red)
   #segment(0, y2, 股 - x2, y2, :red)
   plot!([0, x2, 股, 股 - x2, 0], [y2, 0, 0, y2 ,y2], color=:blue, lw=1)
   if more == true
       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, y1, "y1 ", :red, :right, :vcenter)
       point(0, y2, "y2 ", :red, :right, :vcenter)
       point(x1, 0, "x1", :red, :center, delta=-delta)
       point(x2, 0, "x2", :red, :center, delta=-delta)
       point(x1 - r, y2 - r, "円:r\n(x1-r,y2-r)", :red, :center, :bottom, delta=delta/2)
       point(0, 鈎, "鈎 ", :green, :right, :vcenter)
       point(股, 0, "鈎", :blue, :center, delta=-delta)
       plot!(xlims=(-7delta, 股 + 5delta), ylims=(-5delta, 鈎 + 5delta))
   end
end;

draw(3, 4, true)


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

コメントを投稿

Julia」カテゴリの最新記事