新潟県小千谷市 小千谷二荒神社 天保4年(1833)
涌田和芳,外川一仁:小千谷二荒神社の紛失算額,長岡工業高等専門学校研究紀要,第 51 巻,p.35-40,2015
https://kinpoku.nagaoka-ct.ac.jp/lib/kiyo/vol_51/51_35wakuta.pdf
キーワード:円4個,外円,弦
#Julia #SymPy #算額 #和算 #数学
弧の中に等円 3 個を容れる。弦が 4.8 寸,矢が 1.2 寸のとき,等円の直径はいかほどか。

注:問で「弦が矢の 2 倍」ということは,弧は半円である。上の図は弦が 4.8 寸,矢が 1.2 寸の場合のものである。
円弧の半径と中心座標を \(R,\ (0,\ 0)\)
等円の半径と中心座標を \(r,\ (0,\ R - r),\ (x,\ y + r);\ y = R - 矢\)
とおき,以下の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms R::positive, r::positive, x::positive, y::positive,
矢::positive, 弦::positive
eq1 = x^2 + (y + r)^2 - (R - r)^2
eq2 = x^2 + (R - 2r - y)^2 - 4r^2
eq3 = R - y - 矢
eq4 = y^2 + (弦/2)^2 - R^2
res = solve([eq1, eq2, eq3, eq4], (R, r, x, y))[1]
( (弦^2 + 4*矢^2)/(8*矢), 矢*(弦^2 + 4*矢^2)/(2*(弦^2 + 8*矢^2)), 弦*矢/sqrt(弦^2 + 8*矢^2), (弦 - 2*矢)*(弦 + 2*矢)/(8*矢))
res[2] |> println
2res[2](弦 => 4.8, 矢 => 1.2) |> println
矢*(弦^2 + 4*矢^2)/(2*(弦^2 + 8*矢^2))
1.00000000000000
等円の半径 \(r\) は\(\frac{矢(弦^2 + 4矢^2)}{2(弦^2 + 8矢^2)}\) である。
弦が 4.8 寸,矢が 1.2 寸のとき,等円の直径は 1 寸である。
「術」は,\(角 = 4矢^2; \displaystyle\frac{矢}{\frac{角}{角 + 弦^2} + 1}\)である。
@syms 矢, 弦
角 = 4矢^2
矢/(角/(角 + 弦^2) + 1);
角を最終式に代入し,simplify で簡約化すると,前述した式(半径)の 2 倍(直径)になる。
術 = 矢/(4矢^2/(4矢^2 + 弦^2) + 1)
術 |> simplify |> println
術(弦 => 4.8, 矢 => 1.2) |> println
矢*(弦^2 + 4*矢^2)/(弦^2 + 8*矢^2)
1.00000000000000
描画関数プログラムのソースを見る
function draw(弦, 矢, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
弦 /= 2
(R, r, x, y) = ( (弦^2 + 4*矢^2)/(8*矢), 矢*(弦^2 + 4*矢^2)/(2*(弦^2 + 8*矢^2)), 弦*矢/sqrt(弦^2 + 8*矢^2), (弦 - 2*矢)*(弦 + 2*矢)/(8*矢))
@printf("弦,矢が %g, %g のとき,等円の直径は %g である。\n", 弦, 矢, 2r)
@printf("R = %g; r = %g; x = %g; y = %g\n", R, r, x, y)
plot()
circle(0, 0, R)
circle(0, R - r, r, :blue)
circle2(x, y + r, r, :blue)
y0 = R - 矢
x0 = sqrt(R^2 - y0^2)
segment(-x0, y0, x0, y0, :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(0, R, " R", :red, :left, :bottom, delta=delta/2)
point(0, y, " y", :blue, :left, :bottom, delta=delta/2)
point(0, R - r, "等円:r,(0,R-r)", :blue, :center, delta=-delta/2)
point(x, y + r, "等円:r,(x,y+r)", :blue, :center, delta=-delta/2)
end
end;
draw(4.8, 1.2, true)
以下のアイコンをクリックして応援してください