長野県長野市若穂 清水寺観音堂 寛政6年(1794)
中村信弥「改訂増補 長野県の算額」県内の算額(P.45)
http://www.wasan.jp/zoho/zoho.html
キーワード:円2個,直角三角形,斜線
#Julia #SymPy #算額 #和算 #数学
直角三角形内に斜線と大円,小円を容れる。直角を挟む二辺(鈎と股)の和が 42 寸,斜辺(弦)の長さが 30 寸,大円の直径が 9 寸のとき,小円の直径を求めよ。

直角三角形の 3 辺の長さを,鈎,股,弦とおく。
大円の半径と中心座標を \(r_1,\ (r_1,\ y_1)\)
小円の半径と中心座標を \(r_2,\ (x_2,\ r_2)\)
斜線と斜辺の交点座標を \( (x,, y)\)
斜線の長さを \(l\),\( (x,\ y)\) と \( (0, 鈎)\) を結ぶ線分の長さを \(m\)
とおき,以下の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms r1::positive, y1::positive, r2::positive,
x2::positive, x::positive, y::positive,
鈎::positive, 股::positive, 弦::positive
弦 = 30
鈎股の和 = 42
r1 = 9//2
l = sqrt(x^2 + y^2)
m = sqrt(x^2 + (鈎 - y)^2)
eq1 = y/(股 - x) - 鈎/股
eq2 = 鈎 + 股 - 鈎股の和
eq3 = 鈎^2 + 股^2 - 弦^2
eq4 = (鈎 + l + m)*r1 +(弦 - m + l + 股)*r2 - 鈎*股
eq5 = dist(0, 鈎, 股, 0, r1, y1) - r1^2
eq6 = dist(0, 鈎, 股, 0, x2, r2) - r2^2
eq7 = dist(0, 0, x, y, r1, y1) - r1^2
res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7],
(鈎, 股, y1, r2, x2, x, y))[1] # 1 of 8
(18, 24, 9, 4, 12, 12, 9)
小円の直径は 8 寸である。
その他のパラメータは以下の通りである。
\(鈎 = 18;\ 股 = 24;\ y_1 = 9;\ r_2 = 4;\ x_2 = 12;\ x = 12;\ y = 9\)
なお,5 番目のものも(普通は「鈎<股」なので),図を \(y = x\) の直線で裏返せば最初のものとは異なる図形が得られる。
ただし,大円と小円の位置が異なるので,適解とはいえない。
小円の直径 \(= 8;\ 鈎 = 24;\ 股 = 18;\ y_1 = 10.5;\ r_2 = 4;\ x_2 = 10;\ x = 10.5;\ y = 10\)

描画関数プログラムのソースを見る
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(鈎, 股, y1, r2, x2, x, y) = res[n]
弦 = 30
鈎股 = 42
r1 = 9//2
l = sqrt(x^2 + y^2)
m = sqrt(x^2 + (鈎 - y)^2)
@printf("小円の直径 = %g; 鈎 = %g; 股 = %g; y1 = %g; r2 = %g; x2 = %g; x = %g; y = %g\n",
2r2, 鈎, 股, y1, r2, x2, x, y)
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:black, lw=0.5)
circle(r1, y1, r1)
circle(x2, r2, r2, :blue)
segment(0, 0, x, y)
if more
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
vline!([0], color=:black, lw=0.5)
hline!([0], color=:black, lw=0.5)
point(r1, y1, "大円:r1,(r1,y1)", :red, :center, delta=-delta)
point(x2, r2, "小円:r2,(x2,r2)", :blue, :center, delta=-delta)
point(x, y, " (x,y)", :black, :left, :bottom)
point(0, 鈎, " 鈎", :black, :left, :bottom)
point(股, 0, " 股", :black, :left, :bottom)
plot!(xlims=(-1, 26))
end
end;
以下のアイコンをクリックして応援してください