岐阜県大垣市西外側町 大垣八幡神社(大垣八幡宮) 天保年間
和算の館
http://www.wasan.jp/gifu/ogakihatiman.html
キーワード:円7個,円弧
#Julia #SymPy #算額 #和算 #数学
外円の中に 2 個の甲円,1 個の乙円と 4 個の丙円を容れる。両脇の半円の直径は 2 つの甲円の中心間の距離に等しい。乙径を知って,丙径を求めよ。


外円の半径と中心座標を \(R,\ (0,\ 0)\)
甲円の半径と中心座標を \(r_1,\ (0,\ R - r_1)\)
乙円の半径と中心座標を \(r_2,\ (0, 0,\ r_2)\)
半円の半径と中心座標を \(r_3,\ (r_1 + 2r_2,\ 0);\ r_3 = r_1 + r_2\)
丙円の半径と中心座標を \(r_4,\ (x_4,\ y_4)\)
とおき,以下の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms R::positive, r1::positive, r2::positive, r3::positive,
r4::positive, x4::positive, y4::positive;
r3 = r1 + r2
eq1 = (r1 + 2r2)^2 + r3^2 - (r1 + r3)^2 # 甲円と半円が接する
eq2 = 2r1 + r2 - R # 外円の半径との関係
eq3 = x4^2 + (R - r1 - y4)^2 - (r1 + r4)^2; # 甲円と丙円が接する
eq4 = (r1 + 2r2 - x4)^2 + y4^2 - (r4 + r3)^2 # 半円と丙円が接する
eq5 = x4^2 + y4^2 - (r2 + r4)^2; # 乙円と丙円が接する
res = solve([eq1, eq2, eq3, eq4, eq5], (R, r1, r4, x4, y4))[1]
(5*r2, 2*r2, 6*r2/23, 20*r2/23, 21*r2/23)
# r4: 丙円の半径
res[3]
\(\displaystyle \frac{6 r_{2}}{23}\)
丙円の半径 \(r_4\) は 乙円の半径 \(r_2\) の 6/23 倍である。
乙円の直径が 1 のとき,
外円の直径 = 5; 甲円の直径 = 2; 半円の直径 = 3
丙円の直径 = 0.260869565217391
丙円の中心座標 = (0.434782608695652, 0.456521739130435)
描画関数プログラムのソースを見る
function draw(r2, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(R, r1, r4, x4, y4) = r2 .* (5, 2, 6/23, 20/23, 21/23)
r3 = r1 + r2
@printf("乙円の直径 = %.15g; 外円の直径 = %.15g; 甲円の直径 = %.15g; 半円の直径 = %.15g\n丙円の直径 = %.15g\n丙円の中心座標 = (%.15g, %.15g)\n",
2r2, 2R, 2r1, 2r3, 2r4, x4, y4)
plot()
θ = asind( (r1 + r2) / (2r1 + r2))
(ba, ea) = round.(Int, [θ, 180 - θ])
circle(0, 0, R, :black, beginangle=ba, endangle=ea)
circle(0, 0, R, :black, beginangle=180+ba, endangle=180+ea)
circle22(0, R - r1, r1)
circle(0, 0, r2, :blue)
circle4(x4, y4, r4, :darkorange)
circle(r1 + 2r2, 0, r1 + r2, :green, beginangle=90, endangle=270)
circle(-r1 - 2r2, 0, r1 + r2, :green, beginangle=270, endangle=450)
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(0, R, "R", :red, :center, :bottom, delta=delta/2)
point(0, R-r1, "甲円:r1,(0,R-r1)", :red, :center, delta=-delta)
point(0, 0, "乙円:r2\n(0,0)", :blue, :center, delta=-delta)
point(r2+r3, 0, "半円:r3,(r2+r3,0)", :green, :center, :bottom, delta=delta, deltax=-4delta)
point(x4, y4, "丙円:r4,(x4,y4)", :darkorange, :left, :vcenter, deltax=3delta)
end
end;
draw(1/2, true)
以下のアイコンをクリックして応援してください