3 岩手県花巻市大田 清水寺 明治25年(1892)
安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:円6個,半円,斜線
#Julia #SymPy #算額 #和算 #数学
半円と斜線で区切られた領域に大円,中円,小円を容れる。小円の直径が与えられたとき,中円の直径を求める術を述べよ。

半円の半径と中心座標を \(R,\ (0,\ 0)\)
大円の半径と中心座標を \(r_1,\ (0,\ r_1)\)
中円の半径と中心座標を \(r_2,\ (x_2,\ r_2)\)
小円の半径と中心座標を \(r_3,\ (0,\ -r_3)\)
小円の中心と中円の中心を結ぶ線分と \(x\) 軸との交点座標を \( (x_0,\ 0)\)
とする。
⊿OCE∽⊿DBE∽OEAより,\(r_3\) が与えられたときに,まず \(r_1\) を求め,最終的に \(r_2\) を求める。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms R::positive, r1::positive,
r2::positive, x2::positive,
r3::positive, x3::positive, y3::positive,
x0::positive
R = 2r1
eq1 = dist2(0, -r3, x3, y3, 0, r1, r1 - r3)
eq3 = x2^2 + r2^2 - (R - r2)^2 |> expand
eq4 = x3^2 + y3^2 - (R - r3)^2 |> expand
eq5 = x3^2 + (y3 - r1)^2 - (r1 + r3)^2 |> expand;
1. 小円と中円の関係
eq6 = r3*(x2 - x0)/x0 - r2 # = r3/x0 - r2/(x2 - x0)
eq6 |> println
-r2 + r3*(-x0 + x2)/x0
2. 小円と大円の関係
eq7 = r3/x0 - x0/r1;
eq7 |> println
r3/x0 - x0/r1
eq7 を解いて \(x_0\) を求める。
ans_x0 = solve(eq7, x0)[1]
ans_x0 |> println
sqrt(r1)*sqrt(r3)
eq3 を解いて \(x_2\) を求める。
ans_x2 = solve(eq3, x2)[1];
ans_x2 |> println
2*sqrt(r1)*sqrt(r1 - r2)
3. 中円の半径を求める
eq = eq6(x0 => ans_x0, x2 => ans_x2)
eq |> println
-r2 + sqrt(r3)*(-sqrt(r1)*sqrt(r3) + 2*sqrt(r1)*sqrt(r1 - r2))/sqrt(r1)
ans_r2 = solve(eq, r2)[1]
ans_r2 |> println
2*sqrt(r3)*sqrt(r1 + 2*r3) - 3*r3
eq4, eq5 から \(x_3,\ y_3\) を求め,eq1 に代入し,eq1 を解いて \(r_1\) を求め, 上の式に代入する。
(ans_x3, ans_y3) = solve([eq4, eq5], (x3, y3))[1];
ans_x3 |> println
ans_y3 |> println
2*sqrt(2)*sqrt(r3)*sqrt(r1 - r3)
2*r1 - 3*r3
eq1 = eq1(x3 => ans_x3, y3 => ans_y3) |> simplify
eq1 |> println
-4*r1^4 + 16*r1^3*r3 + 8*r1^2*r3^2 - 16*r1*r3^3 - 4*r3^4
ans_r1 = solve(eq1, r1)[2]
ans_r1 |> println
r3*(2 + sqrt(5))
r2 = ans_r2(r1 => ans_r1) |> simplify
r2 |> println
r3*(-3 + 2*sqrt(sqrt(5) + 4))
中円の半径 \(r_2\) は,小円の半径 \(r_3\) の \(2\sqrt{\sqrt{5} + 4} - 3\) 倍である。
小円の直径が 1 寸のとき 中円の直径は 1.99442408191367 寸である。
2r2(r3 => 0.5).evalf() |> println
1.99442408191367
術では,\(\sqrt{\sqrt{80} + 16} - 3\) 倍となっている。
(sqrt(sqrt(Sym(80)) + 16) - 3) |> println
-3 + sqrt(4*sqrt(5) + 16)
その他のパラメータは以下のとおりである。
\(r_3 = 0.5;\ r_1 = 2.11803;\ R = 4.23607;\ r_2 = 0.997212\)
\(x_2 = 3.08152;\ x_3 = 2.54404;\ y_3 = 2.73607;\ x_0 = 1.02909\)
\(y_{00} = 1.30902;\ x_{01} = 3.20585;\ y_{01} = 2.76889\)
#=
r1 = r3*(2 + √5)
R = 2r1
x3 = 2sqrt(2r3*(r1 - r3))
y3 = 2r1 - 3r3
r2 = r3*(2sqrt(√5+ 4) - 3)
x2 = 2*sqrt(r1)*sqrt(r1 - r2)
x0 = sqrt(r1)*sqrt(r3)
=#
描画関数プログラムのソースを見る
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r3 = 0.5
r1 = r3*(2 + √5)
R = 2r1
x3 = 2sqrt(2r3*(r1 - r3))
y3 = 2r1 - 3r3
r2 = r3*(2sqrt(√5+ 4) - 3)
x2 = 2sqrt(r1*(r1 - r2))
x0 = sqrt(r1*r3)
tanθ = (r3 + y3)/x3
y00 = x0*tanθ
x01 = (tanθ*y00 + sqrt(4*r1^2*tanθ^2 + 4*r1^2 - y00^2))/(tanθ^2 + 1)
y01 = (tanθ*sqrt(4*r1^2*tanθ^2 + 4*r1^2 - y00^2) - y00)/(tanθ^2 + 1)
@printf("小円の直径が %g のとき,中円の直径は %g である。\n", 2r3, 2r2)
@printf("r3 = %g; r1 = %g; R = %g; r2 = %g; x2 = %g; x3 = %g; y3 = %g; x0 = %g\n", r3, r1, R, r2, x2, x3, y3, x0)
@printf("y00 = %g; x01 = %g; y01 = %g\n", y00, x01, y01)
plot()
circle(0, 0, R, :orange, beginangle=0, endangle=180)
segment(-R, 0, R, 0, :orange)
circle(0, r1, r1)
circle2(x2, r2, r2, :green)
circle2(x3, y3, r3, :blue)
circle(0, -r3, r3, :blue)
segment(x01, y01, 0, -y00)
segment(-x01, y01, 0, -y00)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
hline!([0], color=:black, lw=0.5)
vline!([0], color=:gray80, lw=0.5)
point(x3, y3, "小円:r3,(x3,y3) ", :blue, :right, :vcenter)
point(0, -r3, " C 小円:r3,(0,-r3)", :blue, :left, delta=-delta)
point(x0, 0, "E (x0,0)", :black, :left, delta=-delta)
point(x2, 0, "D (x2,0)", :black, :left, delta=-delta)
point(0, r1, "大円:r1,(0,r1)\nA", :red, :right, :bottom, delta=delta)
point(x2, r2, "中円:r2\n(x2,r2)\nB", :green, :center, :bottom, delta=delta)
point(0, 0, "O ", :black, :right, :bottom, delta=delta)
point(0, -y00, " -y00", :black, :left, :vcenter)
point(x01, y01, " (x01,y01)", :black, :left, :vcenter)
segment(x2, r2, 0, -r3, :magenta)
segment(0, r1, 0, -r3, :magenta)
segment(0, r1, x0, 0, :magenta)
segment(x2, r2, x2, 0, :magenta)
end
end;
以下のアイコンをクリックして応援してください