算額(その1488)
四十八 岩手県一関市弥栄 弥栄熊野神社 明治16年(1883)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.
http://www.wasan.jp/yamamura/yamamura.html
キーワード:円4個,円弧,弓形,弦,矢
#Julia, #SymPy, #算額, #和算
円弧(弓形)内に,甲円 2 個,乙円 2 個を容れる。甲円の直径が 147 寸,弦の長さが 294 寸のとき,乙円の直径と矢の長さはいかほどか。
注:実際の図(答)は算額の図とは似ても似つかないものになる。
円弧の半径と中心座標を R, (0, 0)
弦と y 軸の交点座標を (0, y)
甲円の半径と中心座標を r1, (r1, y + r1)
乙円の半径と中心座標を r2, (x2, y + r2)
とおき,以下の連立方程式を解く。
矢の長さは R - y である。
include("julia-source.txt");
using SymPy
@syms R, r1, r2, x2, 矢, 弦
y = R- 矢
x = 弦/2
eq1 = r1^2 + (y + r1)^2 - (R - r1)^2
eq2 = x2^2 + (y + r2)^2 - (R - r2)^2
eq3 = (x2 - r1)^2 + (r1 - r2)^2 - (r1 + r2)^2
eq4 = x^2 + y^2 - R^2;
res = solve([eq1, eq2, eq3, eq4], (R, r2, x2, 矢))[2]
(-(4*r1^2 + 弦^2)^2/(16*r1*(2*r1 - 弦)*(2*r1 + 弦)), r1*(2*r1 - 弦)^2*(2*r1 + 弦)^2/(12*r1^2 + 弦^2)^2, (4*r1^3 + 3*r1*弦^2)/(12*r1^2 + 弦^2), -2*r1*弦^2/((2*r1 - 弦)*(2*r1 + 弦)))
# r2
res[2] |> println
res[2](r1 => 147//2, 弦 => 294) |> println
r1*(2*r1 - 弦)^2*(2*r1 + 弦)^2/(12*r1^2 + 弦^2)^2
27/2
乙円の直径は 27 寸である。
# 矢
res[4] |> simplify |> println
res[4](r1 => 147//2, 弦 => 294) |> println
-2*r1*弦^2/(4*r1^2 - 弦^2)
196
矢の長さは 196 寸である。
function draw(弦, d1, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
x = 弦/2
r1 = d1/2
(R, r2, x2, 矢) = (-(4*r1^2 + 弦^2)^2/(16*r1*(2*r1 - 弦)*(2*r1 + 弦)), r1*(2*r1 - 弦)^2*(2*r1 + 弦)^2/(12*r1^2 + 弦^2)^2, (4*r1^3 + 3*r1*弦^2)/(12*r1^2 + 弦^2), -2*r1*弦^2/((2*r1 - 弦)*(2*r1 + 弦)))
y = R- 矢
@printf("矢 = %g, 乙円の直径 = %g\n", 矢, 2r2)
θ = atand(y, x)
plot()
circle(0, 0, R, :magenta, beginangle=θ, endangle=180-θ)
circle2(r1, y + r1, r1)
circle2(x2, y + r2, r2, :blue)
segment(-x, y, x, y, :green)
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(r1, y + r1, "甲円:r1,(r1,y+r1)", :red, :center, delta=-delta)
point(x2, y + r2, "乙円:r2,(x2,y+r2)", :blue, :right, :vcenter)
point(0, R, "R", :magenta, :center, :bottom, delta=delta)
point(0, y, "y", :green, :center, delta=-delta)
point(弦/2, y, "(弦/2,y)", :green, :right, delta=-delta)
dimension_line(0, y, 0, R, " 矢", :black, :left, delta=20delta)
ylims!(y - 7delta, R + 2delta)
end
end;
draw(294, 147, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます