61 岩手県花泉町金沢字大柳 金沢八幡宮 明治29年(1896)
安富有恒:和算—岩手の現存算額のすべて,青磁社,東京都,1987.
http://www.wasan.jp/iwatenosangaku_yasutomi.pdf
キーワード:円2個,四分円,正三角形
#Julia #SymPy #算額 #和算 #数学
正三角形と四分円2個を組み合わせ,斜線を 2 本引き,隙間に円を容れる。正三角形の一辺の長さが与えられたとき,円の直径を求める術を述べよ。

正三角形の一辺の長さを \(2a\)
円の半径と中心座標を \(r,\ (x,\ y)\)
とおき,以下の連立方程式を解く。
include("julia-source.txt"); # julia-source.txt ソース
using SymPy
@syms a, r, x, y
eq1 = dist(-a, 0, 2a*cosd(Sym(30)), 2a*sind(Sym(30)), x, y) - r^2
eq2 = dist(0, √Sym(3)*a, a, 0, x, y) - r^2
eq3 = x^2 + (√Sym(3)*a - y)^2 - (2a - r)^2;
# res = solve([eq1, eq2, eq3], (r, x, y))
function H(u)
(r, x, y) = u
return [
dist(-a, 0, 2a*cosd(30), √3a + 2a*sind(30), x, y) - r^2,
dist(0, √3a, a, 0, x, y) - r^2,
x^2 + (√3a - y)^2 - (2a - r)^2
]
end;
a = 1/2
iniv = BigFloat[0.3, 0.6, 0.6]
res = nls(H, ini=iniv)
([0.35430062553187885, 0.576740154417105, 0.5756834046326507], true)
正三角形の一辺の長さが 1 のとき,円の直径は res[1][1]*2 = 0.7086012510637577 である。
描画関数プログラムのソースを見る
function draw(more=false)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(r, x, y) = res[1]
plot([a, 0, -a, a], [0, √3a, 0, 0], color=:magenta, lw=0.5)
@printf("正三角形の一辺の長さが %g のとき,円の直径は %g である。\n", 2a, 2r)
circle(0, √3a, 2a, beginangle=-60, endangle=30)
circle(x, y, r, :blue)
segment(-a, 0, 2a*cosd(30), √3a + 2a*sind(30), :green)
segment(0, √3a, 2a*cosd(30), √3a + 2a*sind(30), :green)
circle(-a, 0, 2a, beginangle=60, endangle=150)
segment(-a, 0, -a - 2a*cosd(30), 2a*sind(30), :green)
segment(a, 0, -a - 2a*cosd(30), 2a*sind(30), :green)
ox = 0
oy = √3a/3
len = sqrt(x^2 + (y - oy)^2)
θ = atand(y - √3a/3, x) + 120
x2 = len*cosd(θ)
y2 = len*sind(θ) + oy
circle(x2, y2, r, :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(x, y, "r,(x,y)", :blue, :center, delta=-delta)
point(0, √3a, "√3a", :magenta, :center, :bottom, delta=2delta)
point(a, 0, "a", :magenta, :center, delta=-1.5delta)
ylims!(-7delta, √3a + 2a*sind(30) + 5delta)
end
end;
draw(true)
以下のアイコンをクリックして応援してください