長野県伊那市羽広 仲仙寺 天保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;
以下のアイコンをクリックして応援してください