算額(その1255)
二十五 群馬県高崎市木部町 木部村鎮守社 文化10年(1813)
百十 群馬県高崎市山名町 八幡宮 慶応3年(1867)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:円2個,弦,矢
大小 2 個の円が交差している。共通弦が 8 寸,大円,小円の直径の和が 21.6 寸,大円,小円の矢の和が 3.6 寸のとき,大円の直径はいかほどか。
共通弦を「弦」,直径の和を「径和」,矢の和を「矢和」
大円の半径と中心座標を r1, (0, 0)
小円の半径と中心座標を r2, (0, r1 + r2 - 矢和)
大円と小円の交点座標を (x, y)
とおき,以下の連立方程式を解く。
ただし,一度に解くと SymPy では簡約化できないほど複雑な式になるので,逐次解いていく。
include("julia-source.txt");
using SymPy
@syms x::positive, y::positive,
r1::positive, r2::positive,
弦::positive, 径和::positive, 矢和::positive;
x = 弦/2
eq1 = x^2 + y^2 - r1^2
eq2 = x^2 + (y - (r1 + r2 - 矢和))^2 - r2^2
eq3 = r1 + r2 - 径和/2;
まず,eq1 から y,eq3 から r2 を求め,eq2 に代入し eq12 を作る。
ans_y = solve(eq1, y)[1];
ans_y |> println
sqrt(4*r1^2 - 弦^2)/2
ans_r2 = solve(eq3, r2)[1]
ans_r2 |> println
-r1 + 径和/2
eq12 = eq2(y => ans_y, r2 => ans_r2);
eq12 を解いて r1 を求める。
弦 = 8, 径和 = 21.6, 矢和 = 3.6 のとき,r1 = 5.8 である。
ans_r1 = solve(eq12, r1)[2]
ans_r1 |> println
ans_r1(弦 => 8, 径和 => 21.6, 矢和 => 3.6) |> println
(径和*sqrt(矢和)*(径和 - 矢和) + sqrt(-(径和 - 矢和)*(弦^2 - 径和*矢和 + 矢和^2))*(径和 - 2*矢和))/(4*sqrt(矢和)*(径和 - 矢和))
5.80000000000000
y, r2 は既知の値を代入すれば,求まる。
ans_y |> println
ans_y(弦 => 8, r1 => ans_r1(弦 => 8, 径和 => 21.6, 矢和 => 3.6).evalf()) |> println
sqrt(4*r1^2 - 弦^2)/2
4.20000000000000
ans_r2 |> println
ans_r2(径和 => 21.6, r1 => ans_r1(弦 => 8, 径和 => 21.6, 矢和 => 3.6).evalf()) |> println
-r1 + 径和/2
5.00000000000000
function draw(弦, 径和, 矢和, more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
r1 = (径和*sqrt(矢和)*(径和 - 矢和) + sqrt(-(径和 - 矢和)*(弦^2 - 径和*矢和 + 矢和^2))*(径和 - 2*矢和))/(4*sqrt(矢和)*(径和 - 矢和))
y = sqrt(4*r1^2 - 弦^2)/2
r2 = -r1 + 径和/2
x = 弦/2
plot()
circle(0, 0, r1)
circle(0, r1 + r2 - 矢和, r2, :blue)
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, 0, "大円:r1,(0,0)", :red, :center, delta=-delta/2)
point(0, r1 + r2 - 矢和, "小円:r1,(0,r1+r2-矢和)", :blue, :center, delta=-delta/2)
point(x, y, " (x,y)", :green, :left, :vcenter)
dimension_line(-x, y, x, y, "弦", delta=-2delta, deltax = -3delta)
dimension_line(0, r1, 0, r1 - 矢和, "矢和", :green, delta=3delta, deltax = 3delta)
point(0, r1, " r1", :red, :left, :bottom, delta=delta/2)
point(0, r1 - 矢和, " r1-矢和", :blue, :left, delta=-delta/2)
end
end;
draw(8, 21.6, 3.6, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます