裏 RjpWiki

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

算額(その1179)

2024年08月02日 | Julia

算額(その1179)

時岡郁夫:趣味の数学問題集
http://i4.gmobb.jp/tokioka/tokioka_mondai/index.html
キーワード:円3個,正方形

A問題 57. 一辺の長さが 1 の正方形の中に大円 2 個,小円 1 個を容れる。3 つの円はそれぞれが正方形の 2 辺に接しており,小円はさらに 2 個の大円にも接している(大円 2 個は交差している)。
3 つの円の中心を結ぶと正三角形になるときの,小円の半径を求めよ。

正方形の一辺の長さを a
大円の半径と中心座標を r1, (a - r1, r1), (r1, a - r1)
小円の半径と中心座標を r2, (r2, r2)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms a::positive, r1::positive, r2::positive
eq1 = (a - r1 - r2)^2 + (r1 - r2)^2 - (r1 + r2)^2
eq2 = (a - r1 - r2)^2 + (r1 - r2)^2 - 2(a - 2r1)^2
res = solve([eq1, eq2], (r1, r2))[1]  # 1 of 4

   (-(-69*a^3 - 164*a^3*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5)^2 + 8*a^3*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5)^3 + 254*a^3*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5))/(84*a^2), a*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5))

r1 = res[1] |> simplify |> sympy.sqrtdenest |> simplify
r1 |> display
r1 |> println

   a*(-4*sqrt(2) - 2*sqrt(6) + 3*sqrt(3) + 6)/2

r2 = res[2] |> simplify |> sympy.sqrtdenest |> simplify
r2 |> display
r2 |> println

   a*(-4*sqrt(6) - 6*sqrt(2) + 5*sqrt(3) + 10)/2

3 円の中心間距離がすべて等しくなるのは,大円,小円の半径が,正方形の一辺の長さの (-4*sqrt(2) - 2*sqrt(6) + 3*sqrt(3) + 6)/2 倍と (-4*sqrt(6) - 6*sqrt(2) + 5*sqrt(3) + 10)/2 倍のときである。

正方形の一辺の長さが 1 のとき,大円,小円の半径は 0.3201593438239474,0.18850684623655134 である。

2 円の中心間距離は √2(1 - 2r1) = 0.5086661900605006 である。

(-4*sqrt(2) - 2*sqrt(6) + 3*sqrt(3) + 6)/2  # r1

   0.3201593438239474

(-4*sqrt(6) - 6*sqrt(2) + 5*sqrt(3) + 10)/2  # r2

   0.18850684623655134

√2(1 - 2*0.3201593438239474)  # distance

   0.5086661900605006

function draw(a, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2) = (-(-69*a^3 - 164*a^3*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5)^2 + 8*a^3*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5)^3 + 254*a^3*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5))/(84*a^2), a*(-3*sqrt(2) - sqrt(3)*sqrt(57 - 40*sqrt(2))/2 + 5))
   r1 = a*(-4√2 - 2√6 + 3√3 + 6)/2
   r2 = a*(-4√6 - 6√2 + 5√3 + 10)/2
   distance = 2(a - 2r1)^2
   @printf("a = %g;  r1 = %g;  r2 = %g;  中心間距離 = %g\n", a, r1, r2, distance)
   plot([0, a, a, 0, 0], [0, 0, a, a, 0], color=:blue, lw=0.5)
   circle(r1, a - r1, r1)
   circle(a - r1, r1, r1)
   circle(r2, r2, r2, :green)
   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(r1, a - r1, "大円:r1,(r1,a-r1)", :red, :center, :bottom, delta=delta/2)
       point(a - r1, r1, "大円:r1,(a-r1,r1)", :red, :center, delta=-delta/2)
       point(r2, r2, "小円:r2,(r2,r2)", :green, :center, delta=-delta/2)
       point(a, 0, " a", :blue, :left, :bottom, delta=delta/2)
       point(0, a, " a", :blue, :left, :bottom, delta=delta/2)
   end
end;

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

算額(その1178)

2024年08月02日 | Julia

算額(その1178)

 九九 春日部市小渕 観音院 明治30年(1897)
一〇三 春日部市 東福寺 明治40年(1907)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円,直角三角形,鈎股弦,面積

面積が 36579789.000457254 坪の直角三角形において,以下を求めよ。

注:「問」には明示されていないが,「術」中に「鈎股弦ノ法三四五」とあり,特に断りがない限り鈎股弦が 3:4:5 の直角三角形を意図している。

include("julia-source.txt");

using SymPy

@syms 面積::positive, 鈎::positive, 股::positive, 弦::positive
面積 = big"36579789000457254"/1000000000

   3.657978900045725399999999999999999999999999999999999999999999999999999999999984e+07

eq1 = 鈎*股/2 - 面積
eq2 = 4鈎 - 3股;

res = solve([eq1, eq2], (鈎, 股))[1]

   (7407.40734000000, 9876.54312000000)

10 間四方が 1 歩なのでそれぞれの数値は 10 倍する。
鈎 は 74074.0734 間,股は 98765.4312 間である。

「鈎股弦ノ法三四五」というのは,上のように連立方程式を立てて...というのではなく以下のようなことであろう。

面積/6 の平方根を取り,それを3, 4, 5 倍すると,鈎,股,弦の長さになる。

鈎 = 3√(面積/6)
股 = 4√(面積/6)
弦 = 5√(面積/6)
鈎 |> println
股 |> println
弦 |> println

   7407.407340000000364500003316950021216178154848402297479746933257623008095095922
   9876.543120000000486000004422600028288237539797869729972995911010164010793461277
   12345.67890000000060750000552825003536029692474733716246624488876270501349182663

この算額の共通テーマとして,「答えが 123456789 になる」というのがある。
股は逆方向(降順)で,最後が 312 となり,「惜しい」と思ったが,弦はテーマに沿った解になっている。

弦,短弦,長弦,中鈎は連立して求めることができる。
弦がきれいな数になっているのは前述したが,短弦が 4 並びになっているのが興味深い。

@syms 短弦::positive, 長弦::positive, 中鈎::positive
eq3 = 短弦 + 長弦 - 弦
eq4 = 中鈎*弦/2 - 面積
eq5 = 短弦^2 + 中鈎^2 - 鈎^2
eq6 = 長弦^2 + 中鈎^2 - 股^2
solve([eq3, eq4, eq5, eq6], (弦, 中鈎, 短弦, 長弦))

   1-element Vector{NTuple{4, Sym{PyCall.PyObject}}}:
    (12345.6789000000, 5925.92587200000, 4444.44440400000, 7901.23449600000)

内接円には有名な公式がある。

円の直径 = 鈎 + 股 - 弦

   4938.271560000000243000002211300014144118769898934864986497955505082005396730709

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

算額(その1177)

2024年08月02日 | Julia

算額(その1177)

六四 加須市不動岡 総願寺 慶応2年(1866)
埼玉県立図書館:埼玉県史料集 第二集『埼玉の算額』,昭和44年,誠美堂印刷所,埼玉県与野市.
キーワード:円3個,直線上

甲円,乙円,丙円が隣同士接して,直線の上に載っている。乙円と丙円の直径が 9 寸,4 寸,矢が 6.2 寸のとき,甲円の直径はいかほどか。

甲円の半径と中心座標,矢を r1, (x1, r1),矢
乙円の半径と中心座標を r2, (x2, r2)
丙円の半径と中心座標を r3, (0, r3)
乙円と丙円の共通接線が通る二点の座標を (x, 0), (x2, y)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms r1::positive, x1::positive, 矢::positive,
     r2::positive, x2::positive, r3::positive,
     x::negative, y::positive
r2 = 9//2
r3 = 4//2
矢 = 62//10
eq1 = dist2(x, 0, x2, y, x1, r1, r1 - 矢)
eq2 = dist2(x, 0, x2, y, 0, r3, r3);
eq3 = -r3/x - r2/(x2 - x)
eq4 = x1^2 + (r1 - r3)^2 - (r1 + r3)^2
eq5 = (x2 - x1)^2 + (r1 - r2)^2 - (r1 + r2)^2
res = solve([eq1, eq2, eq3, eq4, eq5], (r1, x1, x2, x, y))[1]

   (31/2, 2*sqrt(31), 5*sqrt(31), -4*sqrt(31), 372/41)

乙円と丙円の直径が 9 寸,4 寸,矢が 6.2 寸のとき,甲円の直径は 31 寸である。

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

  r2 = 4.5;  r3 = 2;  矢 = 6.2;  r1 = 15.5;  x1 = 11.1355;  x2 = 27.8388;  x = -22.2711;  y = 9.07317

function draw(r2, r3, 矢, more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, x1, x2, x, y) = (31/2, 2*sqrt(31), 5*sqrt(31), -4*sqrt(31), 372/41)
   @printf("乙円,丙円の直径が %g, %g,矢が %g のとき,甲円の直径は %g である。\n", 2r2, 2r3, 矢, 2r1)
   @printf("r2 = %g;  r3 = %g;  矢 = %g;  r1 = %g;  x1 = %g;  x2 = %g;  x = %g;  y = %g\n", r2, r3, 矢, r1, x1, x2, x, y)
   plot()
   delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
   circle(x1, r1, r1)
   circle(x2, r2, r2, :blue)
   circle(0, r3, r3, :green)
   abline(x, 0, y/(x2 - x), x, x2 + r2)
   ##
   @syms x0, y0
   eq11 = (x0 - x1)^2 + (y0 - r1)^2 - r1^2
   eq12 = (y0 - r1)/(x0 - x1) * -r3/res[4] + 1
   res2 = solve([eq11, eq12], (x0, y0))[2]
   (x0, y0) = sqrt(5)*r1/25 + x1, r1*(25 - 2*sqrt(155))/25
   (x02, y02) = intersectionXY(x0, y0, x1, r1, x, 0, x2, y)
   segment(x1, r1, x02, y02, :gray70)
   dimension_line(x02, y02, x0, y0, "矢", :black, :left, :vcenter, deltax=20delta)
   ##
   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, r1, "甲円:r1,(x1,r1)", :red, :center, delta=-delta/2)
       point(x2, r2, "乙円:r2,(x2,r2)", :blue, :center, delta=-delta/2)
       point(0, r3, "丙円:r3,(0,r3)", :green, :left, :vcenter, deltax=delta)
       point(x, 0, "x", :black, :left, delta=-delta/2)
       # point(x2, y, "(x2,y)", :black, :right, :bottom, delta=delta/2)
       ylims!(-5delta, 2r1+3delta)
   end
end;

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

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

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