算額(その789)
藤田貞資門人 東都 八木林平質 文化三年丙寅正月
藤田貞資(1807):続神壁算法
http://www.wasan.jp/jinpeki/zokujinpekisanpo.pdf
直角三角形の中に容円と 2 つの頂点を通る弧が入っている。容円は直角三角形の 2辺と接し,弧とも接している。直角を挟む二辺の短い方(鈎)と長い方(股)の長さがそれぞれ 9 寸,12 寸のとき,容円が最小であるときの直径を求めよ。
少し考えると,容円は大きくなる一方である。最小というのは0ではないが,暗黙のうちに,「弧と容円が図のような配置のとき」という条件がある。つまり,「弧は斜辺と 2 点で交わってはいけない」ということであり,斜辺と1点で交わるときは弧が薄くなっていけば容円は大きくなり続ける。弧が一番厚いのは,斜辺が弧の接線のときである。
鈎,股を a, b
弧がその一部である円の半径と中心座標を r1, (b/2, y1)
容円の半径と中心座標を r2, (r2, y2)
とおく。
斜辺が弧の接線であるということは,(b/2)/y1 = a/b ということである。
以下の連立方程式を解く。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms a, b, r1::positive, y1::negative, r2::positive, y2::positive, d
(a, b) = (Sym(9), Sym(12))
y1 = -b^2/2a
eq1 = (b/2 - r2)^2 + (y2 - y1)^2 - (r1 + r2)^2
eq2 = b^2/4 + y1^2 - r1^2
eq3 = (sqrt(a^2 + b^2) +a)*r2 + y2*b - a*b
res = solve([eq1, eq2, eq3], (r1, r2, y2))
1-element Vector{Tuple{Sym{PyCall.PyObject}, Sym{PyCall.PyObject}, Sym{PyCall.PyObject}}}:
(10, 5/2, 4)
鈎,股の長さがそれぞれ 9 寸,12 寸のとき条件を満たすときの容円の直径の最小値は 5 寸である。
function draw(more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(a, b) = (9, 12)
y1 = -b^2/2a
(r1, r2, y2) = (10, 5/2, 4)
plot([0, b, 0, 0], [0, 0, a, 0], color=:black, lw=0.5)
circle(r2, y2, r2)
θ = atand(-y1, b/2)
circle(b/2, y1, r1, :blue, lw=0.2)
circle(b/2, y1, r1, :blue, beginangle=θ, endangle=180 - θ, lw=1)
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(b/2, y1, "(b/2,y1)", :blue, :center, delta=-delta/2)
point(r2, y2, " 容円:r2,(r2,y2)", :red, :left, :vcenter)
point(b, 0, " b", :black, :left, :bottom, delta=delta/2)
point(0, a, " a", :black, :left, :bottom, delta=delta/2)
plot!(ylims=(1.15y1, 10))
end
end;
※コメント投稿者のブログIDはブログ作成者のみに通知されます