算額あれこれ

算額問題をコンピュータで解きます

算額(その665)

長野県長野市若穂 清水寺観音堂 寛政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;


以下のアイコンをクリックして応援してください