裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

算額(その1637)

2025年02月25日 | Julia

算額(その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)


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その1636) | トップ | 次の記事へ »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Julia」カテゴリの最新記事