41 岩手県一関市滝沢字寺田下 熊野白山滝神社 文久元年(1861)
安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:円6個,正方形
#Julia #SymPy #算額 #和算 #数学
問題文,答,術ともに不明であるが,以下のようなものでもあろう。
正方形と大円 2 個が交差しており,正方形に内接し大円に外接する小円 4 個を容れる。正方形の一辺の長さが与えられたとき,小円の直径を求める術を述べよ。

正方形の一辺の長さを \(2a\)
大円の半径と中心座標を \(r_1,\ (a/2,\ a/2);\ r_1 = a/√2\)
小円の半径と中心座標を \(r_2,\ (a - r_2,\ y_2),\ (-y_2,\ r_2 - a)\)
とおき,以下の連立方程式を解く。
\(r_2\) に具体的な数値を与えれば連立方程式は解けるが,数値解になる。
解析解を求めるにはまず eq2 を解いて得られる \(a\) を eq1 に代入し,その式を解いて \(y_2\) を求める。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a::positive, r1::positive, r2::positive, y2::negative
eq1 = (a - r2 - a/2)^2 + (a/2 - y2)^2 - (a/√Sym(2) + r2)^2 |> simplify
eq2 = dist2(0, 0, a, -a, a - r2, y2, r2);
# res = solve([eq1, eq2], (a, y2))
ans_a = solve(eq2, a)[1]
ans_a |> println
r2 + sqrt(2)*r2 - y2
# a
eq11 = eq1(a => ans_a) |> simplify
eq11 |> println
-3*r2^2 - 2*sqrt(2)*r2^2 + 2*y2^2
# y2
ans_y2 = solve(eq11, y2)[1] |> sympy.sqrtdenest
ans_y2 |> println
-r2*(sqrt(2) + 2)/2
\(ans_a\) の \(y_2\) に \(ans_{y2}\) を代入する。
正方形の一辺の長さ \(2a\) は,小円の半径 \(r_2\) の \( (4 + 3\sqrt{2})\) 倍である。
小円の直径が 1 寸のとき,正方形の一辺の長さは 4.121320343559643 寸である。
# a
ans_a(y2 => ans_y2) |> simplify |> println
r2*(4 + 3*sqrt(2))/2
描画関数プログラムのソースを見る
function draw(r2, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
y2 = -r2*(sqrt(2) + 2)/2
a = r2 + sqrt(2)*r2 - y2
r1 = a/√2
@printf("a = %g; r1 = %g; r2 = %g; y2 = %g\n", a, r1, r2, y2)
plot([a, a, -a, -a, a], [-a, a, a, -a, -a], color=:green, lw=0.5)
circle(a/2, a/2, r1, :blue)
circle(-a/2, -a/2, r1, :blue)
circle(a - r2, y2, r2)
circle(-y2, r2 - a, r2)
circle(r2 - a, -y2, r2)
circle(y2, a - r2, r2)
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, a, "a", :green, :right, :bottom, delta=delta/2)
point(a, 0, "a ", :green, :right, :bottom, delta=delta/2)
point(a - r2, y2, "小円:r2\n(a-r2,y2)", :red, :center, :bottom, delta=delta)
point(-y2, r2 - a, "小円:r2\n(-y2,r2-a)", :red, :center, :bottom, delta=delta)
point(a/2, a/2, "大円:r1,(a/2,a/2)", :blue, :center, delta=-delta)
end
end;
draw(1/2, true)
以下のアイコンをクリックして応援してください