算額(その1461)
七十五 群馬県吾妻町三島 馬頭観世音 嘉永4年(1851)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円9個,正方形2個,斜線8本
#Julia, #SymPy, #算額, #和算
算題の文字は判読できないということであるが,「倒立した正方形の中に正方形を容れ,8 個の頂点を 8 本の斜線で結ぶ。区画された領域に,大円 1 個,中円 4 個,小円 4 個を容れる。」ということであろう。
一般性を損なわずに,倒立した正方形の対角線の長さを 2a
大円の半径と中心座標を r1, (0, 0)
中円の半径と中心座標を r2, (r1 + r2, 0)
小円の半径と中心座標を r3, (x3, x3)
とおき,以下の連立方程式を解く。
a は図全体の大きさであり,a が違う図形は全て相似である。
図の見た目は r1 の違いにより変化する。
include("julia-source.txt");
# # julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms a::positive, r1::positive, r2::positive, r3::positive, x3::positive
eq1 = dist2(r1, r1, a, 0, r1 + r2, 0, r2)
eq2 = dist2(r1, r1, a, 0, x3, x3, r3)
eq3 = dist2(0, a, a, 0, x3, x3, r3);
res1 = solve(eq1, r2)[2];
res2 = solve([eq2, eq3], (r3, x3))[4]; # 4 of 4
r2 = r1*(-r1 + sqrt(a^2 - 2*a*r1 + 2*r1^2))/(a - r1)
r3 = √2*a*sqrt(3a^2 - 4a*r1 - 2a*sqrt(2a^2 - 4a*r1 + 4r1^2) + 4r1^2)/(2a - 4r1)
x3 = a*(2a - 2r1 - sqrt(2a^2 - 4a*r1 + 4r1^2))/(2a - 4r1)
倒立正方形の対角線の長さが 2,大円(中心にある円)の半径が 0.35 のとき,全てのパラメータは以下のとおりである。
a = 1; r1 = 0.35; r2 = 0.209053; r3 = 0.103781; x3 = 0.426616
r1 は 0 ≦ r1 ≦ a/2 の範囲の値を取れる(実際にはそれ以外の値も取れる)。値によりイメージは異なる。
function draw(a, r1, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r2 = r1*(-r1 + sqrt(a^2 - 2a*r1 + 2r1^2))/(a - r1)
r3 = √2*a*sqrt(3a^2 - 4a*r1 - 2a*sqrt(2a^2 - 4a*r1 + 4r1^2) + 4r1^2)/(2a - 4r1)
x3 = a*(2a - 2r1 - sqrt(2a^2 - 4a*r1 + 4r1^2))/(2a - 4r1)
@printf("a = %g; r1 = %g; r2 = %g; r3 = %g; x3 = %g\n", a, r1, r2, r3, x3)
p = plot([a, 0, -a, 0, a], [0, a, 0, -a, 0], color=:magenta, lw=0.5, showaxis=false)
plot!(r1.*[1, 1, -1, -1, 1], r1.*[-1, 1, 1, -1, -1], color=:brown, lw=0.5)
plot!([a, r1, 0, -r1, -a, -r1, 0, r1, a], [0, r1, a, r1, 0, -r1, -a, -r1, 0], color=:orange, lw=0.5)
circle(0, 0, r1)
circle42(0, r1 + r2, r2, :blue)
circle4(x3, x3, r3, :tomato)
point(0.5, 0.7, @sprintf("r1 = %ga", r1/a), :black, :left, mark=false)
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, 0, "a", :magenta, :left, :bottom, delta=delta/2)
point(r1, 0, " r1", :red, :left, :vcenter)
point(r1 + r2, 0, " r1+r2", :blue, :left, :vcenter)
point(x3, x3, "r3,(x3,x3)", :tomato, :left, delta=-delta/2, deltax=-3delta)
end
return p
end;
draw(1, 0.35, true)