算額(その1435)
福島県伊達市梁川町粟野堂内 粟野地蔵堂 明治16年(1883)
街角の数学 ~落書き帳「○△□」~ 43.ルージュの伝言
http://streetwasan.web.fc2.com/math15.6.25.html
キーワード:円3個,半円2個,長方形
#Julia, #SymPy, #算額, #和算
長方形の中に,大半円 2 個,中円 1 個,小円 2 個が入っている。小円の半径が与えられたとき,ピンクの部分の面積を求めよ。
中円の半径と中心座標を r2, (0, 0)
大円の半径と中心座標を r1, (0, r2), (0 -r2)
小円の半径と中心座標を r3, (r1 - r3, 0)
とおき,以下の連立方程式を解いて r1, r2 を得る。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cfusing SymPy
@syms r1::positive, r2::positive, r3::positive
eq1 = (r1 - r3)^2 + r2^2 - (r1 + r3)^2
eq2 = 2r2^2 - r1^2
res = solve([eq1, eq2], (r1, r2))[1];
# r1 大円の半径
res[1] |> println
8*r3
# r2 中円の半径
res[2] |> println
4*sqrt(2)*r3
求める面積の 1/4 は第1象限にある A, B, Cで囲まれる図形である。
その図形は,「四分円 OAB」 - 「八分円 DAC」 + 「二等辺三角形 OAD」である。
OA = r2, DA = r1 より,π*r2^2/4 - πr1^2/8 + r2^2/2 = 16r3^2ゆえ,求める全体の面積はその 4 倍の 64r3^2 である。
r3 が 1 寸のとき,面積は 64 平方寸である。
(r1, r2) = (8*r3, 4*sqrt(Sym(2))*r3)
S = 4 * (PI*r2^2/4 - PI*r1^2/8 + r2^2/2)
S |> println
64*r3^2
定積分を求めるのが簡単で間違いがない。
@syms x
S = 4 * integrate(sqrt(r2^2 - x^2) - sqrt(r1^2 - x^2) + r2, (x, 0, r2))
S |> println
64*r3^2
function draw(r3, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r1, r2) = (8*r3, 4*sqrt(2)*r3)
@printf("r3 = %g; r1 = %g; r2 = %g\n", r3, r1, r2)
plot([r1, r1, -r1, -r1, r1], [-r2, r2, r2, -r2, -r2], color=:green, lw=0.5)
circlef(0, 0, r2, :pink)
circle(0, 0, r2)
circlef(0, r2, r1, :white, beginangle=225, endangle=315)
circlef(0, -r2, r1, :white, beginangle=45, endangle=135)
circle(0, r2, r1, beginangle=180, endangle=360)
circle(0, -r2, r1, beginangle=0, endangle=180)
circle2(r1 - r3, 0, r3, :blue)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:gray80, lw=0.5)
point(0, 0, "O ", :black, :right, :vcenter)
point(r2, 0, "A ", :black, :right, :vcenter)
point(0, r2, "B", :black, :center, :bottom, delta=delta)
point(0, r1 - r2, "C ", :black, :right, :bottom, delta=delta)
point(0, -r2, "D ", :black, :right, :bottom, delta=delta)
point(r1, r2, "(r1,r2)", :green, :right, :bottom, delta=delta)
point(r1 - r3, 0, "小円\n\nr3", :blue, :center, :vcenter)
vline!([0], color=:gray70, lw=0.5)
end
end;
draw(1, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます