算額(その665)
長野市若穂 清水寺観音堂 寛政6年(1794)
中村信弥「改訂増補 長野県の算額」(p.45-46)
http://www.wasan.jp/zoho/zoho.html
キーワード:円2個,直角三角形,斜線
#Julia, #SymPy, #算額, #和算
直角三角形内に斜線と大円,小円を入れる。直角を挟む二辺(鈎と股)の和が 42 寸,斜辺(弦)の長さが 30 寸,大円の直径が 9 寸のとき,小円の直径を求めよ。
直角三角形の 3 辺の長さを,鈎,股,弦とおく。
大円の半径と中心座標を r1, (r1, y1)
小円の半径と中心座標を r2, (x2, r2)
斜線と斜辺の交点座標を (x, y)
斜線の長さを l, (x, y) と (0, 鈎) を結ぶ線分の長さを m
とおき,以下の連立方程式を解く。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
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))
8-element Vector{NTuple{7, Sym}}:
(18, 24, 9, 4, 12, 12, 9)
(18, 24, 9, 4, 76/3, 12, 9)
(18, 24, 81/4, 1443/352, 4119/352, 81/13, 693/52)
(18, 24, 81/4, 1443/352, 8929/352, 81/13, 693/52)
(24, 18, 21/2, 4, 10, 21/2, 10)
(24, 18, 21/2, 4, 20, 21/2, 10)
(24, 18, 51/2, 117/32, 171/16, 153/26, 210/13)
(24, 18, 51/2, 117/32, 1269/64, 153/26, 210/13)
解は 8 組得られるが,最初のものが適解である。
小円の直径は 8 寸である。
その他のパラメータは以下の通りである。
鈎 = 18; 股 = 24; y1 = 9; r2 = 4; x2 = 12; x = 12; y = 9
なお,5 番目のものも(普通は「鈎<股」なので),図を y = x の直線で裏返せば最初のものとは異なる図形が得られる。
ただし,大円と小円の位置が異なるので,適解とはいえない。
小円の直径 = 8; 鈎 = 24; 股 = 18; y1 = 10.5; r2 = 4; x2 = 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;
※コメント投稿者のブログIDはブログ作成者のみに通知されます