算額(その1268)
百三十三 群馬県高崎市山名町 八幡宮 明治18年(1885)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円3個,直角三角形
直角三角形の底辺に大円 1 個,等円 2 個が互いに接し合って載っている。直角三角形の直角を挟む二辺の短い方(鈎)が 2.8 寸,長い方(股)が 6.72 寸のとき,大円の直径はいかほどか。
鈎,股をそのまま「鈎」,「股」
大円の半径と中心座標を r1, (r1, r1)
等円の半径と中心座標を r2, (r2, r2), (x2, r2)
とおき,以下の連立方程式を解く。
include("julia-source.txt");
using SymPy
@syms 鈎::positive, 股::positive,
r1::positive, r2::positive, x2::positive;
eq1 = 2(r1 - r2)^2 - (r1 + r2)^2
eq2 = x2 + r2 - 2r1
eq3 = dist2(0, 鈎, 股, 0, x2, r2, r2);
# res = solve([eq1, eq2, eq3], (r1, r2, x2))
たかが三元連立方程式なのに,Python では一度に解けないので,まず eq1, eq2 を解いて r2, x2 求める。
res = solve([eq1, eq2], (r2, x2))[1];
ans_r2 = res[1] |> simplify;
ans_r2 |> println
ans_x2 = res[2]
ans_x2 |> println;
r1*(3 - 2*sqrt(2))
r1*(-1 + 2*sqrt(2))
eq3 に r2,x2 を代入し,r1 を求める。
eq13 = eq3(r2 => ans_r2, x2 => ans_x2);
ans_r1 = solve(eq13, r1)[2]
ans_r1 |> println
股*(-3*股 + 2*sqrt(2)*股 - 2*sqrt(2)*鈎 + 鈎 + sqrt(17 - 12*sqrt(2))*sqrt(股^2 + 鈎^2))/(2*(-8*sqrt(2)*股 + 11*股 - 4*sqrt(2)*鈎 + 4*鈎))
複雑な式になるが,鈎 =2.8, 股 = 6.72 を代入すると r1 = 5.00318003274053 が得られる。
2ans_r1(鈎 => 2.8, 股 => 6.72).evalf() |> println
5.00318003274053
すべてのパラメータは以下のとおりである。
鈎 = 2.8; 股 = 6.72; r1 = 2.50159; r2 = 0.429205; x2 = 4.57398
function draw(鈎, 股, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 股*(-3*股 + 2*sqrt(2)*股 - 2*sqrt(2)*鈎 + 鈎 + (3 - 2*sqrt(2))*sqrt(股^2 + 鈎^2))/(2*(-8*sqrt(2)*股 + 11*股 - 4*sqrt(2)*鈎 + 4*鈎))
r2 = r1*(3 - 2*sqrt(2))
x2 = r1*(-1 + 2*sqrt(2))
@printf("鈎,股が %g, %g のとき,大円の直径は %g である。\n", 鈎, 股, 2r1)
@printf("鈎 = %g; 股 = %g; r1 = %g; r2 = %g; x2 = %g\n", 鈎, 股, r1, r2, x2)
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:blue, lw=0.5)
circle(r1, r1, r1)
circle(x2, r2, r2, :green)
circle(r2, r2, r2, :green)
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(r1, r1, "大円:r1,(r1,r1)", :red, :center, delta=-delta/2)
point(r2, r2, "等円:r2,(r2,r2)", :green, :left, :bottom, delta=delta, deltax=7delta)
point(x2, r2, "r2,(x2,r2)", :green, :right, :bottom, delta=delta, deltax=-7delta)
point(0, 鈎, "鈎 ", :blue, :right, :vcenter)
point(股, 0, " 股", :blue, :left, delta=-delta/2)
plot!(xlims=(-6delta, 股 + 5delta), ylims=(-5delta, 2r1 + delta))
end
end;
draw(2.8, 6.72, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます