山形県七日町 長源寺観音堂 大正4年(1915)
和算の館
http://www.wasan.jp/yamagata/chogenji.html
キーワード:円7個,正方形
#Julia #SymPy #算額 #和算 #数学
3 個の甲円が交わり,上の甲円には上の甲円に内接し下の2個の甲円に外接する正方形を容れ,下の甲円には上の甲円に外接し,下の甲円に内接する乙円と,乙円と上の甲円に外接し下の甲円に内接する丙円を容れる。それぞれの大きさを求めよ。

甲円の半径と中心座標を \(r_1,\ (0,\ r_1),\ (r_1,\ 0)\)
乙円の半径と中心座標を \(r_2,\ (x_2,\ y_2)\)
丙円の半径と中心座標を \(r_3,\ (x_3,\ y_3)\)
正方形の一辺の長さを \(a\)
として,以下の連立方程式を \(r_1\) を未知数のままとして解く。
一度に解いてもよいが,乙円・丙円を容れるのと正方形を容れるのは独立なので,まずは乙円と丙円を甲円に容れる。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms r1::positive, r2::positive, x2::positive, y2::negative,
r3::positive, x3::positive, y3::positive
y2 = r1 - x2
eq1 = (x2 - r1)^2 + y2^2 - (r1 - r2)^2
eq2 = x2^2 + (r1 - y2)^2 - (r1 + r2)^2
eq3 = (x3 - r1)^2 + y3^2 - (r1 - r3)^2
eq4 = (x2 - x3)^2 + (y3 - y2)^2 - (r2 + r3)^2
eq5 = x3^2 + (r1 - y3)^2 - (r1 + r3)^2
solve([eq1, eq2, eq3, eq4, eq5], (r2, x2, r3, x3, y3))[1]
(sqrt(2)*r1/2, r1*(1 + sqrt(2))/2, sqrt(2)*r1/6, r1*(1 + sqrt(2))/2, r1*(sqrt(2)/6 + 1/2))
右下の甲円の円周上に \( (s_x,\ s_y)\) を取り,\(s_x = a/2\) かつ \( (s_x, s_y + a )\) が上の甲円の円周上にあるような \(s_x,\ s_y\) を求める。
@syms a::positive, sx::positive, sy::positive
a = 2sx
eq6 = (sx - r1)^2 + sy^2 - r1^2
eq7 = sx^2 + (sy + a - r1)^2 - r1^2
solve([eq6, eq7], (sx, sy))[1]
(r1/2, sqrt(3)*r1/2)
乙円,丙円の直径はそれぞれ甲円の直径の \(\sqrt{2}/2,\ \sqrt{2}/6\) 倍であり,正方形の一辺の長さは甲円の半径に等しい。
その他のパラメータは以下のとおり。
\(甲円の直径 = 1;\ 乙円の直径 = 0.707107;\ 丙円の直径 = 0.235702\)
\(正方形の一辺の長さ = 0.5\)
\(r_1 = 0.5;\ a = 0.5;\ r_2 = 0.353553;\ x_2 = 0.603553;\ y_2 = -0.103553\)
\(r_3 = 0.117851;\ x_3 = 0.603553;\ y_3 = 0.367851\)
描画関数プログラムのソースを見る
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = 1//2
(r2, x2, r3, x3, y3) = (sqrt(2)/4, 1/4 + sqrt(2)/4, sqrt(2)/12, 1/4 + sqrt(2)/4, sqrt(2)/12 + 1/4)
y2 = r1 - x2
(sx, sy) = (1/4, sqrt(3)/4)
a = 2sx
@printf("甲円の直径 = %g; 乙円の直径 = %g; 丙円の直径 = %g; 正方形の一辺の長さ = %g\n", 2r1, 2r2, 2r3, a)
@printf("r1 = %g; a = %g; r2 = %g; x2 = %g; y2 = %g; r3 = %g; x3 = %g; y3 = %g\n", r1, a, r2, x2, y2, r3, x3, y3)
plot([sx, sx, -sx, -sx, sx], [sy, sy + a, sy + a, sy, sy], color=:green, lw=0.5)
circle(0, r1, r1, :blue)
circle2(r1, 0, r1, :blue)
circle2(x2, y2, r2)
circle2(x3, y3, r3, :orange)
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(0, r1, "甲円:r1,(0,r1)", :blue, :center, :bottom, delta=delta)
point(r1, 0, "甲円:r1,(r1,0)", :blue, :center, :bottom, delta=delta)
point(x2, y2, "乙円:r2,(x2,y2)", :red, :center, :bottom, delta=delta)
point(x3, y3, " 丙円:r3,(x3,y3)", :black, :center, delta=-delta/2)
point(sx, sy, "(sx,sy)", :green, :left, delta=-delta/2)
point(sx, sy + a, " (sx,sy+a)", :green, :left, :vcenter)
end
end;
以下のアイコンをクリックして応援してください