福島県田村郡三春町御木沢 厳島神社 明治18年(1885)
http://www.wasan.jp/fukusima/miharuitukusima3.html
キーワード:円5個,半円,長方形
#Julia #SymPy #算額 #和算 #数学
長方形の中に,半円 2 個,甲円 1 個,乙円 2 個,丙円 2 個を容れる。丙円の直径が与えられたとき,黒積を求める術を述べよ。

半円の半径と中心座標を \(R,\ (0,\ R/2)\)
甲円の半径と中心座標を \(r_1,\ (0,\ 0)\)
丙円の半径と中心座標を \(r_3,\ (R - r_3,\ 0)\)
乙円の半径と中心座標を \(r_2,\ (r_2,\ 0)\)
とおく。
黒積は,「半径 \(R\) の円の面積の 1/8 の扇形の面積 ACB から,三角形の面積 OBC と乙円の面積の 1/2 を引いたものの 4 倍である」。
以下の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms R, r1, r2, r3, 黒積
eq1 = r2^2 + r1^2 - (R - r2)^2
eq2 = (R - r3)^2 + r1^2 - (R + r3)^2
eq3 = 2r1^2 - R^2
eq4 = 4(PI*R^2/8 - r1^2/2 - PI*r2^2/2) - 黒積
res = solve([eq1, eq2, eq3, eq4], (r1, r2, R, 黒積))[3] # 3 of 3
(4*sqrt(2)*r3, 2*r3, 8*r3, r3^2*(-64 + 24*pi))
# r1
res[1] |> println
4*sqrt(2)*r3
# r2
res[2] |> println
2*r3
# r3
res[3] |> println
8*r3
# 黒積
res[4] |> println
r3^2*(-64 + 24*pi)
黒積は,「円周率の 24 倍から 64 を引き,丙円の半径の二乗を掛ける」ことで得られる。
乙円の直径が 1 のとき,黒積は 2.84955592153876 である。
res[4](r3 => 1/2).evalf() |> println
2.84955592153876
術は以下のようで,一致する。
円周率 = PI
丙円径 = 1
( (6円周率 - 16)*丙円径^2).evalf() |> println
2.84955592153876
描画関数プログラムのソースを見る
function draw(r3, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r1, r2, R, 黒積) = (4*sqrt(2)*r3, 2*r3, 8*r3, r3^2*(-64 + 24*pi))
@printf("半円の半径が %g のとき,甲円,乙円,丙円の半径は %g, %g, %g,黒積は %g である。\n", R, r1, r2, r3, 黒積)
plot([R, R, -R, -R, R], [-r1, r1, r1, -r1, -r1], seriestype=:shape, color=:powderblue, lw=0.5, fillcolor=:powderblue)
circlef(0, r1, R, :tomato, beginangle=180, endangle=360)
circlef(0, -r1, R, :tomato, beginangle=0, endangle=180)
circlef(0, 0, r1, :moccasin)
x = [R*cosd(z) for z in 45:0.01:135]
y = [R*sind(z) - r1 for z in 45:0.01:135]
append!(x, reverse(x))
append!(y, -reverse(y))
plot!(x, y, seriestype=:shape, color=:gray60, fcolor=:gray60, lw=0.5, )
circle2f(R - r3, 0, r3, :white)
circle2f(r2, 0, r2, :moccasin)
circle(0, r1, R, :black, beginangle=180, endangle=360)
circle(0, -r1, R, :black, beginangle=0, endangle=180)
circle(0, 0, r1, :black)
circle2(R - r3, 0, r3, :black)
circle2(r2, 0, r2, :black)
rect(-R, -r1, R, r1, :black)
plot!([0, 0, r1, 0], [R - r1, -r1, 0, 0], color=:black, lw=0.5)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:gray80, lw=0.3)
vline!([0], color=:gray80, lw=0.3)
point(0, r1, "半円:R,(0,R/2)", :black, :center, :bottom, delta=delta)
point(R - r3, 0, "丙円:r2,(R-r3,0)", :black, :right, :bottom, delta=2delta, deltax=4delta)
point(r2, 0, "乙円:r2,(r2,0)", :black, :center, delta=-delta)
point(0, R - r1, "A", :black, :center, :bottom, delta=delta)
point(r1, 0, "B ", :black, :right, :vcenter)
point(0, 0, "O ", :black, :right, :vcenter)
point(0, -r1, "C ", :black, :right, :bottom, delta=delta)
ylims!(-r1 - 2delta, r1 + 2delta)
end
end;
draw(1/2, true)
以下のアイコンをクリックして応援してください