算額(その1585)
愛知県名古屋市 熱田神宮 天保13年(1842)
深川英俊,トニー・ロスマン:聖なる数学:算額,森北出版株式会社,2010年4月22日.
キーワード:円4個,接線4本
#Julia, #SymPy, #算額, #和算, #数学
左円と右円が外接しており,左円内には左小円が内接し,右円内には右小円が内接している。左円と右小円,右円と左小円の共通接線を 2 本ずつ引く。左小円と右小円の直径は,左円と右円の直径でどのように表されるか。
左円の半径と中心座標を r1, (r1, 0)
右円の半径と中心座標を r2, (2r1 + r2, 0)
左小円の半径と中心座標を r31, (r1 + r31, 0)
右小円の半径と中心座標を r32, (2r1 + r32, 0)
とおき,以下の連立方程式を解き,r31, r32 を求める。
include("julia-source.txt")
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms r1, r2, r31, r32
eq1 = r31/(2r1 - r31) - r2/(2r1 + r2)
eq2 = r1/(2r2 + r1) - r32/(2r2 - r32)
res = solve([eq1, eq2], (r31, r32));
res[r31] |> println
res[r32] |> println
r1*r2/(r1 + r2)
r1*r2/(r1 + r2)
左円と右円がどんな値をとっても,左小円の半径と,右小円の半径は等しい値 r1*r2/(r1 + r2) になる。
たとえば,
左円,右円の直径が 18, 14 のとき,左小円,右小円の直径は 7.875, 7.875 である。
左円,右円の直径が 18, 16 のとき,左小円,右小円の直径は 8.47059, 8.47059 である。
左円,右円の直径が 18, 6 のとき,左小円,右小円の直径は 4.5, 4.5 である。
左円,右円の直径が 8, 16 のとき,左小円,右小円の直径は 5.33333, 5.33333 である。
左円,右円の直径が 10, 18 のとき,左小円,右小円の直径は 6.42857, 6.42857 である。
function draw(r1, r2, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r31 = r32 = r1*r2/(r1 + r2)
@printf("左円,右円の直径が %g, %g のとき,左小円,右小円の直径は %g, %g である。\n", 2r1, 2r2, 2r31, 2r32)
p = plot()
circle(r1, 0, r1)
circle(2r1 + r2, 0, r2, :magenta)
circle(2r1 - r31, 0, r31, :blue)
circle(2r1 + r32, 0, r32, :green)
θ1 = asind(r2/(2r1 + r2))
abline(0, 0, tand(θ1), 0, 2r1 + 2r2)
abline(0, 0, -tand(θ1), 0, 2r1 + 2r2)
θ2 = asind(-r1/(r1 + 2r2))
abline(2r1 + 2r2, 0, tand(θ2), 0, 2r1 + 2r2)
abline(2r1 + 2r2, 0, -tand(θ2), 0, 2r1 + 2r2)
delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3 # size[2] * fontsize * 2
str = @sprintf("r1=%d, r2=%d", r1, r2)
#point(r1 + r2, max(r1, r2), str, :black, :center, :bottom, delta=delta, mark=false)
point(2r1, max(r1, r2), str, :black, :center, :bottom, delta=delta, mark=false)
if more
hline!([0], color=:gray80, lw=0.5)
vline!([0], color=:gray80, lw=0.5)
point(r1, 0, "左円:r1,(r1,0)", :red, :center, delta=-delta)
point(2r1 + r2, 0, " 右円:r2,(2r1+r2,0)", :magenta, :center, delta=-delta)
point(2r1 - r31, 0, " 左小円", :blue, :center, :bottom, delta=delta)
point(2r1 + r32, 0, " 右小円", :green, :center, :bottom, delta=delta)
end
return p
end;
draw(9, 7, true)