算額あれこれ

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

算額(その213)

長野県伊那市羽広 仲仙寺 天保2年(1831)

中村信弥「改訂増補 長野県の算額」県内の算額(P.127)
http://www.wasan.jp/zoho/zoho.html
キーワード:円13個,斜線
#Julia #SymPy #算額 #和算 #数学


外円の中に斜線 4 本,等円,甲円,乙円を 4 個ずつ入れる。外円の径が分かっているときに乙円の径を求めよ。

外円,等円,甲円,乙円の半径を \(R,\ r_1,\ r_2,\ r_3\)
甲円,乙円の中心座標を \( (x_2,\ R/2),\ (x_3,\ R/2)\)
第1象限にある斜線と円の交点を \( (x,\ y)\)
とおき,以下の連立方程式を解く。

include("julia-source.txt");  # julia-source.txt ソース

using SymPy

@syms r1::positive, r2::positive, r3::positive, x2::positive, x3::positive, x::positive, y::positive, R::positive;

eq1 = x2^2 + R^2//4 - (R - r2)^2
eq2 = distance(0, R/2, R, 0, 0, R - r1) - r1^2
eq3 = distance(0, R/2, R, 0, x2, R/2) - r2^2
eq4 = distance(0, R/2, R, 0, x3, R/2) - r3^2  
eq5 = x2 - r2 - r3 - x3
eq11 = x^2 + y^2 - R^2
eq12 = 2y - R - x

res = solve([eq1, eq2, eq3, eq4, eq5, eq11, eq12], (r1, r2, r3, x2, x3, x, y))[1]

    (R*(-2 + sqrt(5)), R/4, R*(3 - sqrt(5))/8, sqrt(5)*R/4, R*(-5/8 + 3*sqrt(5)/8), 3*R/5, 4*R/5)

乙円の径は外円の径の \( (3 - \sqrt{5})/8\) 倍である。
術では,「3 から 5 の平方根を引き 8 で割って外円径を掛ける」といっている。

\(R = 1\) のとき,\( (3 - \sqrt{5})/8 = 0.09549150281252627\) である。
\(R = 1.00000;\ r_1 = 0.23607;\ r_2 = 0.25000\)
\(r_3 = 0.09549;\ x_2 = 0.55902;\ x_3 = 0.21353\)
\(x = 0.60000;\ y = 0.80000\)

描画関数プログラムのソースを見る

function draw(R, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2, r3, x2, x3, x, y) = (R*(-2 + sqrt(5)), R/4, R*(3 - sqrt(5))/8, sqrt(5)*R/4, R*(-5/8 + 3*sqrt(5)/8), 3*R/5, 4*R/5)
   @printf("R = %.5f;  r1 = %.5f;  r2 = %.5f;  r3 = %.5f;  x2 = %.5f;  x3 = %.5f;  x = %.5f;  y = %.5f\n", R, r1, r2, r3, x2, x3, x, y)
   plot()
   circle(0, 0, R, :red)
   circle22(0, r1, r1, :blue)
   circle22(0, R - r1, r1, :blue)
   circle4(x2, R/2, r2, :green)
   circle4(x3, R/2, r3, :orange)
   segment(-R, 0, x, y)
   segment(R, 0, -x, y)
   segment(-R, 0, x, -y)
   segment(R, 0, -x, -y)
   if more
       point(0, r1, " r1")
       point(0, r1, " 等円", :blue, :left, :bottom)
       point(0, R - r1, " R-r1")
       point(0, R, " R", :blue, :left, :bottom)
       point(R, 0, " R", :blue, :left, :bottom)
       point(x2, R/2, " (x2,R/2)", :green)
       point(x2, R/2, " 甲円 r2", :green, :left, :bottom)
       point(x3, R/2, " (x3,R/2)", :orange)
       point(x3, R/2, " 乙円 r3", :orange, :left, :bottom)
       point(x, y, " (x,y)", :blue, :left, :bottom)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   end
end;


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