裏 RjpWiki

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

算額(その1284)

2024年09月10日 | Julia

算額(その1284)

三十六 岩手県一関市 一関八幡神社前額 天保9年(1838)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.

http://www.wasan.jp/yamamura/yamamura.html
キーワード:円2個,半円1個,正方形,斜線2本

正方形の中に半円と2 本の斜線を描き,区分された領域に大円 1 個,小円 1 個を容れる。小円の直径が与えられたとき大円の直径はいかほどか。

上の図は不適切極まりない。半円が半円らしくない。大円が斜線の片方としか接していない。斜線の始点と終点がおかしい。
正しい位置関係が示されていないと,算額問題を解こうという気力がわかない。

半円の半径と中心座標を r1, (2r1, r1)
大円の半径と中心座標を r2, (r2, 2r1 - r2)
小円の半径と中心座標を r3, (x3, r3)
とおき,以下の連立方程式を解く。
SymPy では一度に解けないので,逐次解いていく。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, r3::positive,
     x3::positive, a::positive, b::positive, c::positive;
eq1 = dist2(0, 0, c, 2r1, 2r1, r1, r1)
eq2 = dist2(0, 0, c, 2r1, r2, 2r1 - r2, r2)
eq3 = dist2(0, 0, c, 2r1, x3, r3, r3)
eq4 = dist2(a, 0, 0, b, 2r1, r1, r1)
eq5 = dist2(a, 0, 0, b, r2, 2r1 - r2, r2)
eq6 = dist2(a, 0, 0, b, x3, r3, r3);
# res = solve([eq1, eq2, eq3, eq4, eq5, eq6], (r1, r2, x3, a, b, c))

eq1 から c を求める。
c = 3r1/2

ans_c = solve(eq1, c)[1]
ans_c |> println

   3*r1/2

eq2 に c を代入して,r1 を求める。
r1 = 2r2
前に求めた c は r2 の 3 倍である。c = 2r3

eq12 = eq2(c => ans_c)
ans_r1 = solve(eq12, r1)[2]
ans_r1 |> println

   2*r2

eq3 に c, r1 を代入して,x3 を求める。
x3 = 2r3

eq13 = eq3(c => 3r2, r1 => 2r2)/8r2^2 |> simplify
ans_x3 = solve(eq13, x3)[1]
ans_x3 |> println

   2*r3

eq4, eq5, eq6 に,c, r1, x3 を代入し,3元連立方程式を解き,r2, a, b を求める。
r2 = 3*r3/2, a = 5*r3, b = 15*r3/4 である。

eq14 = eq4(c => 3r2, r1 => 2r2, x3 => 2r3)/b
eq15 = eq5(c => 3r2, r1 => 2r2, x3 => 2r3)/a
eq16 = eq6(c => 3r2, r1 => 2r2, x3 => 2r3)/b
solve([eq14, eq15, eq16], (r2, a, b))[2]  # 2 of 2

   (3*r3/2, 5*r3, 15*r3/4)

大円の半径 r2 は,小円の半径 r3 の 3/2 倍である。

小円の直径が 1 寸のとき,大円の直径は 1.5 寸である。

r3 が与えられたとき,すべてのパラメータは以下のとおりである(この順に決定される)。

x3 = 2r3
r2 = 3r3/2
r1 = 2r2
c = 3r1/2
a = 5r3
b = 15r3/4

function draw(r3, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   x3 = 2r3
   r2 = 3r3/2
   r1 = 2r2
   c = 3r1/2
   a = 5r3
   b = 15r3/4
   @printf("小円の直径が %g のとき,大円の直径は %g である。\n", 2r3, 2r2)
   @printf("r3 = %g;  x3 = %g;  r2 = %g;  r1 = %g;  c = %g;  a = %g;  b = %g\n", r3, x3, r2, r1, c, a, b)
   plot(2r1 .* [0, 1, 1, 0, 0], 2r1 .* [0, 0, 1, 1, 0], color=:green, lw=0.5)
   circle(2r1, r1, r1, beginangle=90, endangle=270)
   circle(r2, 2r1 - r2, r2, :blue)
   circle(x3, r3, r3, :orange)
   segment(0, 0, c, 2r1)
   segment(a, 0, 0, b)
   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(2r1, r1, "半円:r1,(2r1,r1) ", :red, :right, :vcenter)
       point(r2, 2r1 - r2, "大円:r2,(r2,2r1-r2)", :blue, :center, delta=-delta/2)
       point(x3, r3, "小円:r3,(x3,r3)", :orange, :center, delta=-delta/2)
       point(0, b, "b ", :green, :right, :vcenter)
       point(a, 0, "a", :green, :center, delta=-delta)
       point(c, 2r1, "(c,2r1)", :green, :center, :bottom, delta=delta)
       plot!(xlims=(-4delta, 2r1 + 2delta), ylims=(-4delta, 2r1 + 2delta))
   end

end;

draw(1/2, true)


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

コメントを投稿

Julia」カテゴリの最新記事