算額(その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)
※コメント投稿者のブログIDはブログ作成者のみに通知されます