裏 RjpWiki

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

算額(その956)

2024年05月16日 | Julia

算額(その956)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

楕円の中に大小の正方形が 2 個ずつ入っている。大正方形の一辺の長さが 97 寸のとき,小正方形の一辺の長さはいかほどか。

楕円の長半径と短半径と中心座標を a, b, (0, 0)
大正方形の一辺の長さを s1
小正方形の一辺の長さを s2
とおき,以下の連立方程式を解く。
大正方形の頂点と楕円の接点座標は (a/2, a/2) である。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, s1::positive, s2::positive
eq1 = (a/2)^2/a^2 + (a/2)^2/b^2 - 1
eq2 = b/√Sym(2) - s2
eq3 = a/2*√Sym(2) - s1
solve([eq1, eq2, eq3], (s2, a, b))[1]

   (sqrt(3)*s1/3, sqrt(2)*s1, sqrt(6)*s1/3)

s1 = 97
(sqrt(3)*s1/3, sqrt(2)*s1, sqrt(6)*s1/3)

   (56.0029761113937, 137.17871555019022, 79.20016834998943)

小正方形の一辺の長さは大正方形の一辺の長さの 1/√3 倍である。
大正方形の一辺の長さが 97 寸のとき,小正方形の一辺の長さは 97/√3 = 56.0029761113937 寸である。

なお,楕円の長径,短径は 274.35743110038044 寸,158.40033669997882 寸である。

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   s1 = 97
   (s2, a, b) = (sqrt(3)*s1/3, sqrt(2)*s1, sqrt(6)*s1/3)
   @printf("s2 = %g;  a = %g;  b = %g\n", s2, a, b)
   plot([a, a/2, 0, -a/2, -a, -a/2, 0, a/2, a],
       [0, a/2, 0, -a/2, 0, a/2, 0, -a/2, 0], color=:blue, lw=0.5)
   plot!([s2/√2, 0, -s2/√2], [s2/√2, b, s2/√2], color=:blue, lw=0.5)
   plot!([s2/√2, 0, -s2/√2], -[s2/√2, b, s2/√2], color=:blue, lw=0.5)
   ellipse(0, 0, a, b, color=:red)
   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(a/2, a/2, " (a/2,a/2)", :red, :left, :bottom, delta=delta/2)
       point(s2/√2, s2/√2, "(s2/√2,s2/√2)", :blue, :left, delta=-delta, deltax=-delta)
       point(0, b, " b", :red, :left, :bottom, delta=delta/2)
       point(a, 0, " a", :red, :left, :bottom, delta=delta/2)
   end
end;

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

算額(その955)

2024年05月16日 | Julia

算額(その955)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

正五角形の中に 2 本の対角線を引き,区画された領域に大円 1 個,小円 2 個を入れる。小円の直径が 8 寸 5 分のとき,大円の直径はいかほどか。

正五角形が内接する円の半径と中心座標を R, (0, 0)
大円の半径と中心座標を r1, (0, y1)
小円の半径と中心座標を r2, (x2, y2); y2 = 2R*sind(18) - R
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms x18::positive, y18::positive, x54::positive, y54::positive
(x18, y18) = (cosd(Sym(18)), sind(Sym(18)))
(x54, y54) = (cosd(Sym(54)), sind(Sym(54)));

@syms R::positive, r1::positive, y1::positive,
     r2::positive, x2::positive, y2::positive
y2 = 2R*y18 - R
eq1 = dist2(0, R, R*x18, R*y18, 0, y1, r1)
eq2 = dist2(-R*x54, -R*y54, R*x18, R*y18, 0, y1, r1)
eq3 = dist2(-R*x54, -R*y54, R*x18, R*y18, x2, y2, r2)
eq4 = dist2(R*x54, -R*y54, R*x18, R*y18, x2, y2, r2)
res = solve([eq1, eq2, eq3, eq4], (r1, y1, r2, x2))[1]

   (sqrt(5)*R/4, -R/4 + sqrt(5)*R/4, R*sqrt(-80*sqrt(5) - (-22*sqrt(10)*sqrt(sqrt(5) + 5) - 15*sqrt(10)*sqrt(5 - sqrt(5)) + 35*sqrt(2)*sqrt(5 - sqrt(5)) + 50*sqrt(2)*sqrt(sqrt(5) + 5))*(-75*sqrt(2)*sqrt(sqrt(5) + 5) - 49*sqrt(2)*sqrt(5 - sqrt(5)) + 8*sqrt(5 - 2*sqrt(5)) + 21*sqrt(10)*sqrt(5 - sqrt(5)) + 33*sqrt(10)*sqrt(sqrt(5) + 5)) + 160)/8, R*(-33*sqrt(10*sqrt(5) + 50) - 21*sqrt(50 - 10*sqrt(5)) - 8*sqrt(5 - 2*sqrt(5)) + 49*sqrt(10 - 2*sqrt(5)) + 75*sqrt(2*sqrt(5) + 10))/8)

大円,小円の半径 r1, r2 は R の関数として表される。
r1 = sqrt(5)*R/4
r2 = R*sqrt(-80*sqrt(5) - (-22*sqrt(10)*sqrt(sqrt(5) + 5) - 15*sqrt(10)*sqrt(5 - sqrt(5)) + 35*sqrt(2)*sqrt(5 - sqrt(5)) + 50*sqrt(2)*sqrt(sqrt(5) + 5))*(-75*sqrt(2)*sqrt(sqrt(5) + 5) - 49*sqrt(2)*sqrt(5 - sqrt(5)) + 8*sqrt(5 - 2*sqrt(5)) + 21*sqrt(10)*sqrt(5 - sqrt(5)) + 33*sqrt(10)*sqrt(sqrt(5) + 5)) + 160)/8
r1 と r2 の比 r1/r2 は,1 + √5/2 となる。

@syms d
apart(res[1]/res[3], d) |> println

   1 + sqrt(5)/2

したがって,小円の直径が 8.5 寸のとき,大円の直径は 8.5(1 + √5/2) = 18.003288904374106 寸である。

8.5(1 + √5/2)

   18.003288904374106

なお,外円の半径は逆算して 16.1026311234993 であることがわかる。

solve(res[3] - 8.5/2, R)[1] |> println

   16.1026311234993

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

R = 16.1026;  r1 = 9.00164;  y1 = 4.97599;  r2 = 4.25;  x2 = 7.23053;  y2 = -6.15066

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (x18, y18) = (cosd(18), sind(18))
   (x54, y54) = (cosd(54), sind(54))
   R = 16.1026311234993
   r1 = sqrt(5)*R/4
   y1 = -R/4 + sqrt(5)*R/4
   r2 = R*sqrt(-80*sqrt(5) - (-22*sqrt(10)*sqrt(sqrt(5) + 5) - 15*sqrt(10)*sqrt(5 - sqrt(5)) + 35*sqrt(2)*sqrt(5 - sqrt(5)) + 50*sqrt(2)*sqrt(sqrt(5) + 5))*(-75*sqrt(2)*sqrt(sqrt(5) + 5) - 49*sqrt(2)*sqrt(5 - sqrt(5)) + 8*sqrt(5 - 2*sqrt(5)) + 21*sqrt(10)*sqrt(5 - sqrt(5)) + 33*sqrt(10)*sqrt(sqrt(5) + 5)) + 160)/8
   x2 = R*(-33*sqrt(10*sqrt(5) + 50) - 21*sqrt(50 - 10*sqrt(5)) - 8*sqrt(5 - 2*sqrt(5)) + 49*sqrt(10 - 2*sqrt(5)) + 75*sqrt(2*sqrt(5) + 10))/8
   y2 = 2R*y18 - R
   @printf("R = %g;  r1 = %g;  y1 = %g;  r2 = %g;  x2 = %g;  y2 = %g\n", R, r1, y1, r2, x2, y2)
   x = R .* [x18, 0, -x18, -x54, x54, x18]
   y = R .* [y18, 1, y18, -y54, -y54, y18]
   plot(x, y, color=:blue, lw=0.5)
   segment(R*x18, R*y18, -R*x54, -R*y54) 
   segment(-R*x18, R*y18, R*x54, -R*y54) 
   circle(0, y1, r1)
   circle(x2, y2, r2, :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(0, y1, "大円:r1,(0,y1)", :red, :center, delta=-delta/2)
       point(x2, y2, "小円:r2,(x2,y2)", :blue, :center, delta=-delta/2)
       point(R*x18, R*y18, "(R*x18,R*y18)", :black, :right, :bottom, delta=delta/2, deltax=delta/2)
       point(R*x54, -R*y54, " (R*x54,-R*y54)   ", :black, :right, :bottom, delta=delta/2)
       point(0, R, " R", :blue, :center, :bottom, delta=delta/2)
   end

end;

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

算額(その954)

2024年05月16日 | Julia

算額(その954)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

外円の中に「帯直円」と大円 2 個,中円 4 個,小円 2 個を入れる。大円,小円の直径がそれぞれ 5 寸,1 寸のとき,中円の直径はいかほどか。



「帯直円」とは,陸上競技のトラックのような,長方形の左右の辺が半円になったもの。今回の帯直円は,上下の辺が短いので,ちょっといびつな円のように見えるだけかもしれない。

外円の半径と中心座標を R, (0, 0); R = 2r1 + 2r3
大円の半径と中心座標を r1, (0, r1)
中円の半径と中心座標を r2, (x2, r2)
小円の半径と中心座標を r3, (0, 2r1 + r3)
帯直円の半円の半径と中心座標を r0, (x0, 0); r0 = 2r1, x0 = R - r0
とおき,以下の連立方程式を解く。

include("julia-source.txt");

@syms R::positive, r0::positive, x0::positive, r1::positive,
     r2::positive, x2::positive, r3::positive
R = 2r1 + 2r3
r0 = 2r1
x0 = R - r0
eq2 = x2^2 + (r1 - r2)^2 - (r1 + r2)^2
eq3 = (x2 - x0)^2 + r2^2 - (r0 - r2)^2
(r2, x2) = solve([eq2, eq3], (r2, x2))[2]  # 2 of 2

   ((r1^2 - r3^2 + r3*(r3 + sqrt(2*r1^2 - r3^2)))/(2*r1), r3 + sqrt(2*r1^2 - r3^2))

r2 = r2 |> simplify
r2 |> println

   (r1^2 + r3*sqrt(2*r1^2 - r3^2))/(2*r1)

中円の半径は (r1^2 + r3*sqrt(2*r1^2 - r3^2))/(2*r1) である。

このr1, r3 に半径ではなくそれぞれの円の直径を代入して計算すれば中円の直径が求まる。
大円,小円の直径がそれぞれ 5 寸,1 寸のとき,中円の直径は (5^2 + sqrt(50 - 1))/10 = 3.2 寸である。

(5^2 + sqrt(50 - 1))/10

   3.2

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r3) = (5, 1) ./ 2
   (r2, x2) = ((r1^2 + r3*sqrt(2r1^2 - r3^2))/2r1, r3 + sqrt(2r1^2 - r3^2))
   R = 2r1 + 2r3
   r0 = 2r1
   x0 = R - r0
   @printf("大円の直径が %g,小円の直径が %g のとき,中円の直径は %g\n", 2r1, 2r3, 2r2)
   plot()
   circle(0, 0, 2r1 + 2r3, :magenta)
   circle22(0, r1, r1)
   circle22(0, 2r1 + r3, r3, :blue)
   circle4(x2, r2, r2, :green)
   circle(x0, 0, r0, :orange, beginangle=270, endangle=450)
   circle(-x0, 0, r0, :orange, beginangle=90, endangle=270)
   segment(x0, r0, x0, -r0, :gray90)
   segment(-x0, r0, x0, r0, :orange)
   segment(-x0, -r0, x0, -r0, :orange)
   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, r1, "大円:r1,(0,r1)", :red, :center, delta=-delta/2)
       point(x2, r2, "中円:r2,(x2,r2)", :green, :center, delta=-delta/2)
       point(0, 2r1 + r3, " 小円:r3,(0,2r1+r3)", :blue, :left, :vcenter)
       point(x0, 0, " x0", :orange, :left, :vcenter)
       point(R, 0, " R", :magenta, :left, :vcenter)
       point(0, R, " R", :magenta, :left, :bottom, delta=delta/2)
       point(x0, 2r1, "", :orange)
   end
end;

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

算額(その953)

2024年05月16日 | Julia

算額(その953)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円6個

2 個の甲円が交差しており,区分された領域に乙円が 4 個入っている。甲円の直径が 99 寸のとき,乙円の直径はいかほどか。

甲円の半径と中心座標を r1, (x1, 0); x1 = r2
乙円の半径と中心座標を r2, (0, r2)
とおき以下の連立方程式を解く。

include("julia-source.txt");

@syms r1::positive, r2::positive, x1::positive
eq1 = (r1 - x1) - (x1 + r1 - 2r2)
eq2 = x1^2 + r2^2 - (r1 - r2)^2
res = solve([eq1, eq2], (r2, x1))[1]
res |> println

   (r1*(-1 + sqrt(2)), r1*(-1 + sqrt(2)))

乙円の半径 r2 は,甲円の半径 r1 の (√2 - 1) 倍である。
甲円の直径が 99 寸のとき,乙円の直径は 99(√2 - 1) = 41.00714267493642 である。

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r1 = 99/2
   (r2, x1) = (r1*(-1 + sqrt(2)), r1*(-1 + sqrt(2)))
   @printf("甲円の直径が %g のとき,乙円の直径は %g\n", 2r1, 2r2)
   plot()
   circle2(x1, 0, r1)
   circle22(0, r2, r2, :blue)
   circle2(x1 + r1 - r2, 0, r2, :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(x1, 0, "甲円:r1\n(x1,0)", :red, :center, delta=-delta/2)
       point(0, r2, "乙円:r2\n(0,r2)", :blue, :center, delta=-delta/2)
       point(x1 + r1 - r2, 0, " 乙円:r2\n(x1+r1-r2)", :blue, :center, delta=-delta/2)
       point(x1 + r1, 0, "x1+r1 ", :red, :right, :bottom, delta=delta/2)
       point(x1 - r1, 0, " x1-r1", :red, :left, :bottom, delta=delta/2)
   end
end;

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

算額(その952)

2024年05月16日 | Julia

算額(その952)

一七 大里郡岡部村岡 稲荷社 文化13年(1816)

埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.

正方形の中に甲楕円,乙楕円を 2 個ずつ入れる。楕円の短径がいずれも 4 寸 9 分であるとき,乙楕円の長径はいかほどか。
注:ここでいう短径は差し渡し径で文字通り短い方を短径と呼んでいる。短径,長径は短半径,長半径の 2 倍。

以下では x 軸方向の長さを長半径,y 軸方向の長さを短半径と呼ぶ。
甲楕円の長半径,短半径,中心座標を a, 2a, (a, 0); a = 4.9/2
乙楕円の長半径,短半径,中心座標を c, a, (0, a)
甲楕円と乙楕円の接点の座標を (x, y)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

@syms a::positive, c::positive, x::positive, y::positive
eq1 = (x - a)^2/a^2 + y^2/(2a)^2 - 1  # (x, y)が甲楕円上にある
eq2 = x^2/c^2 + (y - a)^2/a^2 -1  # (x, y)が乙楕円上にある
eq3 = -(2a)^2*(x - a)/(a^2*y) + a^2*x/(c^2*(y - a))  # (x, y) での接線の傾きが等しい
res = solve([eq1, eq2, eq3], (c, x, y))[1]

   (3*sqrt(6)*a/4, 9*a/5, 6*a/5)

乙楕円の長半径は,甲楕円の長半径の 3√6/4 倍である。
甲楕円の長半径が 4.9/2 のとき,乙楕円の長半径は 4.50093740236409(長径はその 2 倍の 9.00187480472818)である。

ちなみに,甲楕円,乙楕円の接点座標は (4.41, 2.94) である。

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = 4.9/2
   (c, x, y) = (3*sqrt(6)*a/4, 9*a/5, 6*a/5)
   @printf("乙楕円の長径 = %g,接点の座標 = (%g, %g)\n", 2c, x, y)
   plot([2a, 2a, -2a, -2a, 2a], [-2a, 2a, 2a, -2a, -2a], color=:green, lw=0.5)
   ellipse(0, a, c, a, color=:red)
   ellipse(0, -a, c, a, color=:red)
   ellipse(a, 0, a, 2a, color=:blue)
   ellipse(-a, 0, a, 2a, 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(x, y, "(x,y) ", :green, :right, :vcenter)
       point(0, 2a, " 2a", :green, :left, :bottom, delta=delta/2)
       point(2a, 0, " 2a", :green, :left, :bottom, delta=delta/2)
       point(a, 0, " 甲楕円:a,2a\n (a,0)", :blue, :left, :vcenter)
       point(0, a, "   乙楕円:c,a,(0,a)", :red, :left, :vcenter)
   end
end;

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

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

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