百三十五 群馬県安中市鷺宮 咲前神社 明治20年(1887)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
「算額」第三集 全国調査,香川県算額研究会.(香川県立図書館蔵)
キーワード:円5個,直角三角形
#Julia #SymPy #算額 #和算 #数学
直角三角形内に大円,小円,等円を容れる。鈎,股がそれぞれ 3 寸,4 寸,大円の直径が 2 寸のとき,等円の直径はいかほどか。

鈎,股,弦を \(a,\ b,\ c\)
大円の半径と中心座標を \(r_1,\ (r_1,\ r_1)\)
小円の半径と中心座標を \(r_2,\ (x_2,\ r_2)\)
等円の半径と中心座標を \(r_3,\ (x_2,\ r_2),\ (x_3,\ y_3)\)
とおき,以下の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a::positive, b::positive, c::positive,
r1::positive, r2::positive, x2::positive,
r3::positive, x3::positive, y3::positive
# (a, b, r1) = (Sym(3), Sym(4), 2//2)
c = sqrt(a^2 + b^2)
r1 = (a + b - c)//2
r2 = 3r3
eq1 = a*x2 + (b + c)r2 - a*b
eq2 = (x3 - r1)^2 + (r1 - y3)^2 - (r1 - r3)^2 |> expand
eq3 = (x2 - r1)^2 + (r1 - r2)^2 - (r1 + r3)^2 |> expand
eq4 = r2*(b - x3) - y3*(b - x2);
# solve([eq1, eq2, eq3, eq4], (x2, r3, x3, y3))[2]
eq1 を解いて \(x_2\) を求める。
ans_x2 = solve(eq1, x2)[1]
ans_x2 |> println
(a*b - 3*b*r3 - 3*r3*sqrt(a^2 + b^2))/a
eq4 に \(ans_{x2}\) を代入して \(y_3\) を求める。
ans_y3 = solve(eq4(x2 => ans_x2), y3)[1]
ans_y3 |> println
a*(b - x3)/(b + sqrt(a^2 + b^2))
eq3 に \(ans_{x2}\) を代入して \(r_3\) を求める。
eq13 = eq3(x2 => ans_x2) |> simplify
ans_r3 = solve(eq13, r3)[1] |> simplify
ans_r3 |> println
a*(7*a^2 + a*b - 7*a*sqrt(a^2 + b^2) - 8*a*sqrt(a^2 - a*sqrt(a^2 + b^2) + b^2) + 6*b^2 + 6*b*sqrt(a^2 + b^2))/(2*(17*a^2 + 18*b^2 + 18*b*sqrt(a^2 + b^2)))
eq2 に \(ans_{y3},\ ans_{x2},\ ans_{r3}\) を代入して \(x_3\) を求める。
eq12 = eq2(y3 => ans_y3, x2 => ans_x2, r3 => ans_r3) |> simplify
ans_x3 = solve(eq12, x3)[2] |> simplify;
ans_x2 = ans_x2(r3 => ans_r3);
ans_y3 = ans_y3(x3 => ans_x3);
\(x_2,\ x_3,\ y_3\) は非常に長い式になるが, \(r_3\) は程々の長さである。
# ans_x2 |> println
ans_r3 |> println
# ans_x3 |> println
# ans_y3 |> println
a*(7*a^2 + a*b - 7*a*sqrt(a^2 + b^2) - 8*a*sqrt(a^2 - a*sqrt(a^2 + b^2) + b^2) + 6*b^2 + 6*b*sqrt(a^2 + b^2))/(2*(17*a^2 + 18*b^2 + 18*b*sqrt(a^2 + b^2)))
ans_x2(a => 3, b => 4).evalf() |> println
ans_r3(a => 3, b => 4).evalf() |> println
ans_x3(a => 3, b => 4).evalf() |> println
ans_y3(a => 3, b => 4).evalf() |> println
2.14429208725912
0.206189768082320
1.75307450884191
0.748975163719364
\(a,\ b\) に特定の値を代入しておけば,自動的に連立方程式を解くことができる。
(x2, r3, x3, y3) = (77/89 + 36*sqrt(10)/89, 31/89 - 4*sqrt(10)/89, 87*sqrt(10)/445 + 101/89, 85/89 - 29*sqrt(10)/445)
(2.1442920872591196, 0.20618976808232004, 1.753074508841908, 0.748975163719364
いずれにしろ,鈎 = 3 寸,股 = 4 寸のとき,等円の直径は 2*0.20618976808232004 = 0.41237953616464007 寸である。
描画関数プログラムのソースを見る
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(a, b) = (3, 4)
(x2, r3, x3, y3) = (2.14429208725912, 0.206189768082320, 1.75307450884191, 0.748975163719364)
c = sqrt(a^2 + b^2)
r1 = (a + b - c)/2
r2 = 3r3
@printf("a = %g; b = %g; r1 = %g; x2 = %g; r3 = %g; x3 = %g; y3 = %g\n", a, b, r1, x2, r3, x3, y3)
plot([0, b, 0, 0], [0, 0, a, 0], color=:green, lw=0.5)
circle(r1, r1, r1)
circle(x2, r2, r2, :blue)
circle(x2, r2, r3, :magenta)
circle(x3, y3, r3, :magenta)
circle(2x2 - x3, 2r2 - y3, r3, :magenta)
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(r1, r1, "大円:r1,(r1,r1)", :red, :center, delta=-delta/2)
point(x3, y3, "等円:r3,(x3,y3) ", :black, :right, :vcenter)
point(x2, r2, "小円:r2,(x2,r2)", :black, :left, :bottom, delta=delta, deltax=-3delta)
point(b, 0, " b", :green, :left, :bottom, delta=delta/2)
point(0, a, " a", :green, :left, :bottom, delta=delta/2)
end
end;
以下のアイコンをクリックして応援してください