算額(その719)
四二 浦和市西堀(現さいたま市桜区西堀) 氷川神社 嘉永5年(1852)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
埼玉県浦和市西堀 氷川神社 嘉永5年
http://www.wasan.jp/saitama/uhikawa.html
直角三角形内に斜線を引き一方の区画に内接する円を描く。直角を挟む二辺の短い方(鈎)と長い方(股)の辺の長さがそれぞれ 8 寸,15 寸,円の直径が 4 寸のとき,斜線の長さはいかほどか。
鈎,股をそれぞれ「鈎」,「股」
斜線と股の交点座標を (a, 0)
円の半径と中心座標を r, (x, r)
とおき,以下の連立方程式を解く。
斜線の長さ length は後で計算してもよいが,一緒に求めておく。
include("julia-source.txt");
using SymPy
@syms r::positive, x::positive, a::positive,
length::positive,
鈎::positive, 股::positive
eq1 = dist(0, 鈎, a, 0, x, r) - r^2
eq2 = dist(0, 鈎, 股, 0, x, r) - r^2
eq3 = sqrt(鈎^2 + a^2) - length
res = solve([eq1, eq2, eq3], (a, x, length));
("a:", res[3][1]) |> println # a
("x:", res[3][2]) |> println # x
("length:", res[3][3]) |> println # length
("a:", (-2*r^2*股 - 2*r^2*sqrt(股^2 + 鈎^2) + 2*r*股*鈎 + 2*r*鈎*sqrt(股^2 + 鈎^2) - 股*鈎^2)/(鈎*(2*r - 鈎)))
("x:", (-r*sqrt(股^2 + 鈎^2) - 股*(r - 鈎))/鈎)
("length:", sqrt(鈎^4*(2*r - 鈎)^2 + (2*r^2*股 + 2*r^2*sqrt(股^2 + 鈎^2) - 2*r*股*鈎 - 2*r*鈎*sqrt(股^2 + 鈎^2) + 股*鈎^2)^2)/(鈎*Abs(2*r - 鈎)))
4 組の解が得られるが,3 番目のものが適解である。
sqrt(股^2 + 鈎^2) を 「弦」とおくと少しきれいになるか。
a: (-2*r^2*股 - 2*r^2*弦 + 2*r*股*鈎 + 2*r*鈎*弦 - 股*鈎^2)/(鈎*(2*r - 鈎))
x: (-r*弦 - 股*(r - 鈎))/鈎
length: sqrt(鈎^4*(2*r - 鈎)^2 + (2*r^2*股 + 2*r^2*弦 - 2*r*股*鈎 - 2*r*鈎*弦 + 股*鈎^2)^2)/(鈎*Abs(2*r - 鈎)))
鈎,股,円の半径が 8,15,4/2 のとき斜線の長さは 10 寸である。
他のパラメータは a = 6,x = 7 である。
(鈎, 股) = (8, 15)
r = 4//2
Abs = abs
((-2*r^2*股 - 2*r^2*sqrt(股^2 + 鈎^2) + 2*r*股*鈎 + 2*r*鈎*sqrt(股^2 + 鈎^2) - 股*鈎^2)/(鈎*(2*r - 鈎)), (-r*sqrt(股^2 + 鈎^2) - 股*(r - 鈎))/鈎, sqrt(鈎^4*(2*r - 鈎)^2 + (2*r^2*股 + 2*r^2*sqrt(股^2 + 鈎^2) - 2*r*股*鈎 - 2*r*鈎*sqrt(股^2 + 鈎^2) + 股*鈎^2)^2)/(鈎*Abs(2*r - 鈎)))
(6.0, 7.0, 10.0)
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(鈎, 股, r) = (8, 15, 4/2)
Abs = abs
(a, x, length) = ((-2*r^2*股 - 2*r^2*sqrt(股^2 + 鈎^2) + 2*r*股*鈎 + 2*r*鈎*sqrt(股^2 + 鈎^2) - 股*鈎^2)/(鈎*(2*r - 鈎)), (-r*sqrt(股^2 + 鈎^2) - 股*(r - 鈎))/鈎, sqrt(鈎^4*(2*r - 鈎)^2 + (2*r^2*股 + 2*r^2*sqrt(股^2 + 鈎^2) - 2*r*股*鈎 - 2*r*鈎*sqrt(股^2 + 鈎^2) + 股*鈎^2)^2)/(鈎*Abs(2*r - 鈎)))
@printf("斜線の長さ = %g; a = %g; x = %g\n", length, a, x)
plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:blue, lw=0.5)
circle(x, r, r)
segment(0, 鈎, a, 0, :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, 鈎, " 鈎", :blue, :left, :bottom)
point(股, 0, " 股", :blue, :left, :bottom, delta=delta/2)
point(a, 0, "a ", :blue, :right, :bottom, delta=delta/2)
point(x, r, "r,(x,r)", :red, :center, delta=-delta/2)
end
end;