裏 RjpWiki

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

算額(その1155)

2024年07月18日 | Julia

算額(その1155)

九八 鴻巣市三ツ木山王 三木神社 明治28年(1895)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円4個,楕円,正方形,菱形

正方形の中に楕円,菱形を 1 個ずつ,等円を 4 個容れる。楕円の長径,短径が 4 寸,3 寸のとき,等円の直径はいかほどか。

正方形の一辺の長さを 2s
楕円の長半径,短半径を a, b
楕円と菱形の一辺との接点座標を (x0, y0)
等円の半径と中心座標を r, (s - r, s - r)
とおき,以下の連立方程式を解く。

include("julia-source.txt")

using SymPy

@syms s::positive, r::positive,
     x0::positive, y0::positive, a::positive, b::positive
eq1 = dist2(s, 0, 0, s, s - r, s - r, r)
eq2 = x0^2/a^2 + y0^2/b^2 - 1
eq3 = -b^2*x0/(a^2*y0^2) + 1
eq4 = y0/(s - x0) - 1
res = solve([eq1, eq2, eq3, eq4], (r, s, x0, y0))[1]

   ((a*sqrt(4*a^2 + 1) - a + sqrt(2)*b*sqrt(sqrt(4*a^2 + 1) - 1) - sqrt(2*a^4 - a^2*sqrt(4*a^2 + 1) + a^2 + sqrt(2)*a*b*sqrt(4*a^2 + 1)*sqrt(sqrt(4*a^2 + 1) - 1) - sqrt(2)*a*b*sqrt(sqrt(4*a^2 + 1) - 1) + b^2*sqrt(4*a^2 + 1) - b^2))/(2*a), (a*sqrt(4*a^2 + 1) - a + sqrt(2)*b*sqrt(sqrt(4*a^2 + 1) - 1))/(2*a), sqrt(4*a^2 + 1)/2 - 1/2, b*sqrt(2*sqrt(4*a^2 + 1) - 2)/(2*a))

@syms t
res[1](sqrt(4a^2 +  1) => t) |> println
res[2](sqrt(4a^2 +  1) => t) |> println
res[3](sqrt(4a^2 +  1) => t) |> println
res[4](sqrt(4a^2 +  1) => t) |> println

   (a*t - a + sqrt(2)*b*sqrt(t - 1) - sqrt(2*a^4 - a^2*t + a^2 + sqrt(2)*a*b*t*sqrt(t - 1) - sqrt(2)*a*b*sqrt(t - 1) + b^2*t - b^2))/(2*a)
   (a*t - a + sqrt(2)*b*sqrt(t - 1))/(2*a)
   t/2 - 1/2
   b*sqrt(2*t - 2)/(2*a)

楕円の長半径 a,短半径 b が与えられたとき,等円の半径は
(a*t - a + sqrt(2)*b*sqrt(t - 1) - sqrt(2*a^4 - a^2*t + a^2 + sqrt(2)*a*b*t*sqrt(t - 1) - sqrt(2)*a*b*sqrt(t - 1) + b^2*t - b^2))/(2*a)
ただし,t = sqrt(4a^2 +  1) と,長々しい式になる。

楕円の長半径,短半径が 4/2, 3/2 のとき,等円の直径は 1.463744764599768 である。

「答」は 「1.461 余り」としている。

a = 4/2
b = 3/2
t = sqrt(4a^2 +  1)
r = (a*t - a + sqrt(2)*b*sqrt(t - 1) - sqrt(2*a^4 - a^2*t + a^2 + sqrt(2)*a*b*t*sqrt(t - 1) - sqrt(2)*a*b*sqrt(t - 1) + b^2*t - b^2))/(2*a)
2r

   1.463744764599768

function draw(a, b, more=false)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   t = sqrt(4a^2 +  1)
   r = (a*t - a + sqrt(2)*b*sqrt(t - 1) - sqrt(2*a^4 - a^2*t + a^2 + sqrt(2)*a*b*t*sqrt(t - 1) - sqrt(2)*a*b*sqrt(t - 1) + b^2*t - b^2))/(2*a)
   s = (a*t - a + sqrt(2)*b*sqrt(t - 1))/(2*a)
   x0 = t/2 - 1/2
   y0 = b*sqrt(2*t - 2)/(2*a)
   @printf("等円の直径は %g である。\n", 2r)
   plot([s, s, -s, -s, s], [-s, s, s, -s, -s], color=:magenta, lw=0.5)
   plot!([s, 0, -s, 0, s], [0, s, 0, -s, 0], color=:green, lw=0.5)
   circle4(s - r, s - r, r)
   ellipse(0, 0, a, b, color=: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(s - r, s - r, "等円:r,(s-r,s-r)", :red, :center, delta=-delta/2)
       point(x0, y0)
   end
end;


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia で統計解析 2024/7/18 版 | トップ | 算額(その1156) »
最新の画像もっと見る

コメントを投稿

Julia」カテゴリの最新記事