裏 RjpWiki

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

算額(その775)

2024年03月12日 | Julia

算額(その775)

福島県二本松市 新田神社 元治元年(1864)
http://www.wasan.jp/fukusima/sinden.html

正方形内に交差する 2 個の楕円と,区画された領域に甲円 1 個,乙円 4 個が入っている。甲円の直径が 4 寸,乙円の直径が 3 寸のとき,正方形の面積はいかほどか。

計算を簡単にするために図形を 45 度回転し楕円の長軸・短軸が x-y 軸に載るようにする。
楕円の長半径と短半径と中心座標をそれぞれ a, b, (0, 0)
甲円の半径と中心座標を r1, (0, 0); 甲円の半径は楕円の短半径に等しい。r1 = b
乙円の半径と中心座標を r2, (b + r2, 0)
楕円と乙円の交点座標を (x0, y0)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, x0::positive, y0::positive, r1, r2, x1, y1
r2 = 3//2
r1 = b = 4//2
eq1 = x0^2/a^2 + y0^2/b^2 - 1
eq2 = -b^2*x0/(a^2*y0) + (x0 - b - r2)/y0
eq3 = (x0 - b - r2)^2 + y0^2 - r2^2
res1 = solve([eq1, eq2, eq3], (a, x0, y0));
res1[4]

   (sqrt(2)*b^(3/2)*sqrt(1/(b - r2)), 2*b, sqrt(b)*sqrt(-b + 2*r2))

4 組の解が得られるが,最後のものが適解である。

楕円が内接する正方形は,楕円と正方形の一辺の接点を (x1, y1) とした以下の連立方程式を解く。

@syms x1::positive, y1::positive
r2 = 3//2
r1 = b = 4//2
a = sqrt(Sym(2))*b^(3//2)*sqrt(1/(b - r2))
eq4 = x1^2/a^2 + y1^2/b^2 - 1
eq5 = -b^2*x1/(a^2*y1) + 1
res2 = solve([eq4, eq5], (x1, y1));
res2[2]

   (2*b^2*sqrt((b - r2)/(3*b - r2))/(b - r2), b*sqrt((b - r2)/(3*b - r2)))

2 組の解が得られるが,2 番目のものが適解である。

接点を通る傾き -1 の直線が x-y 軸で切り取られるものが正方形の一辺 sl である。x2 は x 切片(x 軸との交点)。

x2 = x1 + y1
sl = x2*√2

甲円の直径が 4 寸,乙円の直径が 3 寸のとき,正方形の一辺の長さは 8.48528,正方形の面積は 72 歩である。

sl = sqrt(Sym(2)) * (res2[2][1] + res2[2][2]) |> simplify
sl |> println
sl(b => 4//2, r2 => 3//2).evalf() |> println
sl(b => 4//2, r2 => 3//2)^2 |> println

   sqrt(2)*b*sqrt((b - r2)/(3*b - r2))*(3*b - r2)/(b - r2)
   8.48528137423857
   72

その他のパラメータは以下のとおりである。

   r1 = 2;  r2 = 1.5;  a = 5.65685;  b = 2;  x0 = 4;  y0 = 1.41421;  x1 = 5.33333;  y1 = 0.666667;  x2 = 6

もとの位置で図を描くのも簡単だが,わかりやすくするために回転させたままの図を描く。

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = b = 4//2
   r2 = 3//2
   (a, x0, y0) = (sqrt(2)*b^(3/2)*sqrt(1/(b - r2)), 2*b, sqrt(b)*sqrt(-b + 2*r2))
   (x1, y1) = (2.0*b^2*sqrt((b - r2)/(3.0*b - r2))/(b - r2), b*sqrt((b - r2)/(3.0*b - r2)))
   x2 = x1 + y1
   sl = x2*√2
   @printf("正方形の一辺の長さは %g,面積は %g\n", sl, sl^2)
   @printf("r1 = %g;  r2 = %g;  a = %g;  b = %g;  x0 = %g;  y0 = %g;  x1 = %g;  y1 = %g;  x2 = %g\n",
       r1, r2, a, b, x0, y0, x1, y1, x2)
   plot([0, x2, 0, -x2, 0], [-x2, 0, x2, 0, -x2], color=:blue, lw=0.5)
   ellipse(0, 0, a, b, color=:green)
   ellipse(0, 0, b, a, color=:green)
   circle(0, 0, r1, :magenta)
   circle42(0, b + r2, r2)
   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, 0, "甲円:r1\n(0,0)", :magenta, :center, delta=-delta)
       point(b + r2, 0, "乙円:r2\n(b+r2,0)", :red, :center, delta=-delta)
       point(x0, y0, "(x0,y0)", :green, :right, delta=-delta)
       point(x1, y1, " (x1,y1)", :green, :left, :vcenter)
       point(x2, 0, " x2", :blue, :left, delta=-delta/2)
   end
end;

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

算額(その774)

2024年03月12日 | Julia

算額(その774)

宮城県白石市小原 小原温泉薬師堂 大正5年(1916)
徳竹亜紀子,谷垣美保:宮城県白石市小原地区の算額調査,仙台高等専門学校名取キャンパス研究紀要,第57号,2021.

https://www.sendai-nct.ac.jp/natori-library/wp/wp-content/uploads/2021/04/No57_2.pdf

愛媛県松山市 伊佐爾波神社(19) 山崎昌竜門人桐野富五郎季長 奉納 明治11年(1878)
http://www.wasan.jp/ehime/isaniwa19.html

甲円,丁円,己円に挟まれて戊円がそれぞれに外接している。丁円,戊円,己円の直径がそれぞれ 3 寸,1 寸,2 寸のとき,甲円の直径はいかほどか。

甲円の半径と中心座標を r1, (x1, y1)
丁円の半径と中心座標を r2
戊円の半径と中心座標を r3
己円の半径と中心座標を r4
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms r1::positive, x1::positive, y1::positive, r2::positive, r3::positive, r4::positive
eq1 = x1^2 + y1^2 - (r1 + r2)^2
eq2 = x1^2 + (r2 + r3 - y1)^2 - (r1 + r3)^2
eq3 = x1^2 + (r2 + 2r3 + r4 - y1)^2 - (r1 + r4)^2
res = solve([eq1, eq2, eq3], (r1, x1, y1))

   2-element Vector{Tuple{Sym{PyCall.PyObject}, Sym{PyCall.PyObject}, Sym{PyCall.PyObject}}}:
    (r3*(r2 + r3)*(r3 + r4)/(r2*r4 - r3^2), -2*sqrt(r2)*r3*sqrt(r4)*sqrt(r2 + r3)*sqrt(r3 + r4)/(r2*r4 - r3^2), (r2^2*r4 + r2*r3*r4 - r3^3 - r3^2*r4)/(r2*r4 - r3^2))
    (r3*(r2 + r3)*(r3 + r4)/(r2*r4 - r3^2), 2*sqrt(r2)*r3*sqrt(r4)*sqrt(r2 + r3)*sqrt(r3 + r4)/(r2*r4 - r3^2), (r2^2*r4 + r2*r3*r4 - r3^3 - r3^2*r4)/(r2*r4 - r3^2))

丁円の直径 = 3;  戊円の直径 = 1;  己円の直径 = 2 のとき,甲円の直径 = 2.4

その他のパラメータは以下のとおりである。

r1 = 1.2;  x1 = 1.69706;  y1 = 2.1

function draw(more=false)
   pyplot(size=(400, 400), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r2, r3, r4) = (3, 1, 2) .// 2
   (r1, x1, y1) = (r3*(r2 + r3)*(r3 + r4)/(r2*r4 - r3^2), 2*sqrt(r2)*r3*sqrt(r4)*sqrt(r2 + r3)*sqrt(r3 + r4)/(r2*r4 - r3^2), (r2^2*r4 + r2*r3*r4 - r3^3 - r3^2*r4)/(r2*r4 - r3^2))
   @printf("丁円の直径 = %g;  戊円の直径 = %g;  己円の直径 = %g のとき,甲円の直径 = %g\n", 2r2, 2r3, 2r4, 2r1)
   @printf("r1 = %g;  x1 = %g;  y1 = %g\n", r1, x1, y1)
   plot()
   circle(0, 0, r2)
   circle(0, r2 + r3, r3, :blue)
   circle(0, r2 + 2r3 + r4, r4, :green)
   circle2(x1, y1, r1, :magenta)
   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(x1, y1, " 甲円:r1,(x1,y1)", :magenta, :center, delta=-delta/2)
       point(0, 0, " 丁円:r2,(0,0)", :red, :center, delta=-delta/2)
       point(0, r2 + r3, "戊円:r3,(0,r2+r3) ", :black, :right, :vcenter)
       point(0, r2 + 2r3 + r4, "己円:r4\n(0,r2+2r3+r4)", :green, :center, delta=-delta/2)
   end
end;

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

算額(その773)

2024年03月12日 | Julia

算額(その773)

宮城県白石市小原字馬頭山 三瀧神社奉納算額(萬蔵稲荷神社所蔵) 明治8年
徳竹亜紀子,谷垣美保:宮城県白石市小原地区の算額調査,仙台高等専門学校名取キャンパス研究紀要,第57号,2021.

https://www.sendai-nct.ac.jp/natori-library/wp/wp-content/uploads/2021/04/No57_2.pdf

平面上に直径 6 寸の乙球 3 個が互いに接して載っている。更にその中央部に甲球が載っており,甲球のてっぺんまでの高さが 12 寸である。
甲球の直径はいかほどか。

甲球の半径と中心座標を r1, (0, 0, 12 - r1)
乙球の半径と中心座標を r2, (r2, -r2/√3, r2), (0, 2r2/√3, r2)とおく。

上方(z軸方向)から見下ろしたとき,乙球の中心は正三角形を構成している。z 軸から y 軸方向にある球の中心の水平距離は 2r2√3 である。

次に y z 平面において,甲球と乙球の中心間の距離についてピタゴラスの定理を適用する。

以下の方程式を解けば,甲球の半径を求めることができる。

using SymPy
@syms r1, r2
r2 = 6//2
eq = (12 - r1 - r2)^2 + (2r2/√Sym(3))^2 - (r1 + r2)^2;
solve(eq, r1)#[1] |> println

   1-element Vector{Sym{PyCall.PyObject}}:
    r2^2/18 - r2 + 6

甲球の半径は,乙球の半径を二乗し 18 で割り,乙球の半径を引き 6 を加えると求まる。
乙球の半径が 6/2 寸ならば,甲球の直径は 2((6/2)^2/18 - 6/2 + 6) = 7 寸である。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村