算額(その1637)
宮城県石巻市尾崎宮下 久須師神社 明治20年(1887)
徳竹亜紀子,谷垣美保: 2021年度の算額調査,仙台高等専門学校名取キャンパス 研究紀要,第 58 号, p.7-28, 2022.
https://www.sendai-nct.ac.jp/natori-library/wp/wp-content/uploads/2022/03/kiyo2022-2.pdf
正方形の中に楕円と正三角形を容れる。楕円の長径と短径が与えられたとき,正三角形の一辺の長さを得る術を述べよ。
図を反時計回りに 45° 回転させて考える。
楕円が内接する正方形の一辺の長さ a は「算法助術の公式94」で求めることができる。
正三角形の一辺の長さを b,楕円上の正三角形の頂点座標を (x0, y0) とおき,以下の方程式を解く。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms a, b, p, q, θ, x0, y0
a = √Sym(2)sqrt(p^2 + q^2)
θ = Sym(45 + 60)
x0 = b*cosd(θ)
y0 = b*sind(θ)
eq1 = x0^2/p^2 + (y0 - a/sqrt(Sym(2)))^2/q^2 - 1
ans_b = solve(eq1, b)[1] # 1 of 2
ans_b |> println
p^2*(-2*sqrt(2)*3^(1/4)*q + (sqrt(2) + sqrt(6))*sqrt(p^2 + q^2))/(sqrt(3)*p^2 + 2*p^2 - sqrt(3)*q^2 + 2*q^2)
普通は分母の有理化を行うが,分子の有理化を行ってみる。
分子・分母に num = (2√2*3^(1/4)*q + (√2 + √6)*sqrt(p^2 + q^2)) を掛ける。
num = (2*sqrt(Sym(2))*Sym(3)^(1//4)*q + (sqrt(Sym(2)) + sqrt(Sym(6)))*sqrt(p^2 + q^2));
num2 = numerator(ans_b)*num|> simplify;
den2 = denominator(ans_b)*num |> simplify;
num2/den2 |> simplify |> println
num2/den2 |> simplify |> display
4*p^2/(2*sqrt(2)*3^(1/4)*q + (sqrt(2) + sqrt(6))*sqrt(p^2 + q^2))
徳竹らが提示したのと同じ式が得られた。
2√Sym(2)p^2/((√Sym(3) + 1)sqrt(p^2 + q^2) + 2fourthroot(Sym(3))*q)
function draw(p, q, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
a = sqrt(2)*sqrt(p^2 + q^2)
b = 4*p^2/(2*sqrt(2)*3^(1/4)*q + (sqrt(2) + sqrt(6))*sqrt(p^2 + q^2))
println("a = $a, b = $b")
plot(a/√2 .*[1, 0, -1, 0, 1], a/√2 .+ a/√2 .*[0, 1, 0, -1, 0], color=:green, lw=0.5)
ellipse(0, a/√2, p, q, color=:red)
plot!([0, b*cosd(45), b*cosd(105), 0], [0, b*sind(45), b*sind(105), 0], color=:blue, lw=0.5)
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, a/√2, "楕円:p,q,(0,a/√2)", :red, :center, delta=-delta/2)
dimension_line(0, 0, b/√2, b/√2, "b", :black, :left, delta=-delta/2, deltax=delta, dx=a/70, dy=-a/70, length=0.4)
dimension_line(0, 0, a/√2, a/√2, "a", :black, :left, delta=-delta/2, deltax=delta, dx=a/18, dy=-a/18, length=0.4)
point(b*cosd(105), b*sind(105), "(x0,y0)", :blue, :center, :bottom, delta=delta)
end
end;
draw(6, 3, true)