長野県長野市若穂 清水寺観音堂 寛政6年(1794)
中村信弥「幻の算額」(P.204)
http://www.wasan.jp/maborosi/maborosi.html
キーワード:円2個,直角三角形,斜線
#Julia #SymPy #算額 #和算 #数学
直角三角形の中に斜線(矢)を描き,区画内に大円と小円を容れる。鈎と股の和が 42 寸,弦が 30 寸,大円の直径が 9 寸のとき,小円の直径はいかほどか。

直角三角形の 3 辺を「鈎」,「股」,「弦」とし,「中鈎」,「和」もそのまま変数とする。
大円の半径と中心座標を \(r_1, (r_1, y_1)\)
小円の半径と中心座標を \(r_2, (x_2, r_2)\)
斜線と斜辺(弦)の交点座標を \( (x_0, y_0)\)
とおき,以下の連立方程式を解く。
eq1 は「隔斜 \(n\) 円径の定理」である。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms 鈎, 股, 弦, r1, r2, R, 中鈎, 和
R = (鈎 + 股 - sqrt(鈎^2 - 股^2))/2
R = (和 - 弦)/2 # 鈎 + 股 = 和
中鈎 = (和^2 - 弦^2)/(2*弦)
eq1 = (1 - 2R/中鈎) - (1 - 2r1/中鈎)*(1 - 2r2/中鈎);
ans_r2 = solve(eq1, r2)[1]
ans_r2 |> println
(2*r1*和^2 - 2*r1*弦^2 - 和^3 + 和^2*弦 + 和*弦^2 - 弦^3)/(2*(4*r1*弦 - 和^2 + 弦^2))
ans_r2(和 => 42, 弦 => 30, r1 => 9/2) |> println
4.00000000000000
小円の半径は 4 寸(直径は 8 寸)である。
算額の問への答えはここまでである。
以下では,図を描くためにパラメータを求める。
まず最初に,鈎,股を求める。
eq2 = 弦^2 - (鈎^2 + 股^2)
eq3 = 鈎 + 股 - 和;
res = solve([eq2, eq3], (鈎, 股))[2];
# 鈎
res[1] |> println
和/2 - sqrt(-和^2 + 2*弦^2)/2
# 股
res[2] |> println
和/2 + sqrt(-和^2 + 2*弦^2)/2
次に,斜線と斜辺(弦)の交点座標 \( (x_0, y_0)\) と小円の中心の \(x\) 座標 \(x_2\) を求める。
@syms x0::positive, y0::positive, y1::positive,
x2::positive
eq4 = dist2(0, 0, x0, y0, r1, y1, r1)
eq5 = dist2(0, 0, x0, y0, x2, r2, r2)
eq6 = (鈎 - y0)/x0 - 鈎/股
eq7 = dist2(0, 鈎, 股, 0, x2, r2, r2);
res2 = solve([eq5, eq6, eq7], (x0, y0, x2))[1];
# x0
res2[1] |> println
股*(-4*r2^3*股^2 - 4*r2^3*股*sqrt(股^2 + 鈎^2) - 4*r2^3*鈎^2 + 2*r2^2*股^2*鈎 + 2*r2^2*股*鈎*sqrt(股^2 + 鈎^2) + 4*r2^2*鈎^3 + 2*r2*股^2*鈎^2 - 股^2*鈎^3)/(鈎*(4*r2^2*股^2 + 4*r2^2*鈎^2 - 股^2*鈎^2))
# y0
res2[2] |> println
2*r2*(2*r2^2*股^2 + 2*r2^2*股*sqrt(股^2 + 鈎^2) + 2*r2^2*鈎^2 + r2*股^2*鈎 - r2*股*鈎*sqrt(股^2 + 鈎^2) - 股^2*鈎^2)/(4*r2^2*股^2 + 4*r2^2*鈎^2 - 股^2*鈎^2)
# x2
res2[3] |> println
(-r2*sqrt(股^2 + 鈎^2) - 股*(r2 - 鈎))/鈎
最後に 大円の中心の \(y\) 座標 \(y_1\) を求める。
eq8 = dist2(0, 鈎, 股, 0, r1, y1, r1)
ans_y1 = solve(eq8, y1)[1];
# y1
ans_y1 |> println
(-r1*sqrt(股^2 + 鈎^2) - 鈎*(r1 - 股))/股
描画関数プログラムのソースを見る
function draw(和, 弦, r1, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
R = (和 - 弦)/2 # 鈎 + 股 = 和
中鈎 = (和^2 - 弦^2)/(2*弦)
r2 = (2*r1*和^2 - 2*r1*弦^2 - 和^3 + 和^2*弦 + 和*弦^2 - 弦^3)/(2*(4*r1*弦 - 和^2 + 弦^2))
(鈎, 股) = (和/2 - sqrt(-和^2 + 2*弦^2)/2, 和/2 + sqrt(-和^2 + 2*弦^2)/2)
(x0, y0, x2) = (股*(-4*r2^3*股^2 - 4*r2^3*股*sqrt(股^2 + 鈎^2) - 4*r2^3*鈎^2 + 2*r2^2*股^2*鈎 + 2*r2^2*股*鈎*sqrt(股^2 + 鈎^2) + 4*r2^2*鈎^3 + 2*r2*股^2*鈎^2 - 股^2*鈎^3)/(鈎*(4*r2^2*股^2 + 4*r2^2*鈎^2 - 股^2*鈎^2)), 2*r2*(2*r2^2*股^2 + 2*r2^2*股*sqrt(股^2 + 鈎^2) + 2*r2^2*鈎^2 + r2*股^2*鈎 - r2*股*鈎*sqrt(股^2 + 鈎^2) - 股^2*鈎^2)/(4*r2^2*股^2 + 4*r2^2*鈎^2 - 股^2*鈎^2), (-r2*sqrt(股^2 + 鈎^2) - 股*(r2 - 鈎))/鈎)
(x0, y0, y1) = (2*r1*(2*r1^2*股^2 + 2*r1^2*鈎^2 + 2*r1^2*鈎*sqrt(股^2 + 鈎^2) + r1*股*鈎^2 - r1*股*鈎*sqrt(股^2 + 鈎^2) - 股^2*鈎^2)/(4*r1^2*股^2 + 4*r1^2*鈎^2 - 股^2*鈎^2), 鈎*(-4*r1^3*股^2 - 4*r1^3*鈎^2 - 4*r1^3*鈎*sqrt(股^2 + 鈎^2) + 4*r1^2*股^3 + 2*r1^2*股*鈎^2 + 2*r1^2*股*鈎*sqrt(股^2 + 鈎^2) + 2*r1*股^2*鈎^2 - 股^3*鈎^2)/(股*(4*r1^2*股^2 + 4*r1^2*鈎^2 - 股^2*鈎^2)), (-r1*sqrt(股^2 + 鈎^2) - 鈎*(r1 - 股))/股)
y1 = (-r1*sqrt(股^2 + 鈎^2) - 鈎*(r1 - 股))/股
@printf("和 = %g; 弦 = %g; 大円の直径 = %g; 内接円の直径 = %g; 中鈎 = %g; 小円の直径 = %g\n", 和, 弦, 2r1, 2R, 中鈎, 2r2)
@printf("鈎 = %g; 股 = %g; x0 = %g; y0 = %g; y1 = %g; x2 = %g\n", 鈎, 股, x0, y0, y1, x2)
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:green, lw=0.5)
circle(r1, y1, r1)
circle(x2, r2, r2, :blue)
segment(0, 0, x0, y0, :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, y1, "大円:r1,(r1,y1)", :red, :center, delta=-delta/2)
point(x2, r2, "小円:r2,(x2,r2)", :blue, :center, delta=-delta/2)
point(x0, y0, "(x0,y0)", :magenta, :left, :bottom, delta=delta/2)
point(0, 鈎, " 鈎", :green, :left, :bottom, delta=delta/2)
point(股, 0, " 股", :green, :left, :bottom, delta=delta/2)
end
end;
draw(42, 30, 9/2, true)
以下のアイコンをクリックして応援してください