裏 RjpWiki

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

算額(その277)

2023年06月12日 | Julia

算額(その277)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(238)
長野県松本市筑摩 筑摩神社 明治6年(1873)

大小 2 つの正方形が接し,頂点を結ぶ斜線で区切られた区画内に大小の円が入っている。大円,小円の径がそれぞれ 1尺8寸,8寸のとき,大きい方の正方形の一辺の長さを求めよ。

大小の正方形の一辺の長さを a, b とおく。斜線が正方形と交わる座標を (a,c) とおく。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, c::positive;

eq1 = a/(a + b) - c/b  # 三角形が相似であることから
eq2 = (a - c)/b - 9//4  # 同じく相似関係から
eq3 = 2a - c - sqrt(a^2 + (a - c)^2) - 18;  # 大円の直径は「鉤 + 股 - 弦」であることから

res = solve([eq1, eq2, eq3], (a, b, c))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (36, 12, 9)

大きい方の正方形の一辺の長さは 36 寸,小さい方のそれは 12寸,斜線は (36, 9) を通る。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, b, c) = res[1]
   (r1, r2) = (9, 4)
   @printf("a = %.6f 寸;  b = %.6f 寸;  c = %.6f\n", a, b, c)
   plot([0, a+b, 0, 0], [0, 0, a, 0], color=:black, lw=0.5)
   rect(0, 0, a, a, :black, fill=false)
   rect(a, 0, a + b, b, :black, fill=false)
   segment(0, a, a + b, 0, linewidth=0.5)
   circle(a - r1, a - r1, r1, :blue)
   circle(a + b - r2, b - r2, r2)
   if more
       point(a - r1, a - r1, "大円:r1\n(a-r1,a-r1)", :blue, :left, :bottom)
       point(a + b - r2, b - r2, " 小円:r2\n (a+b-r2,b-r2)", :red)
       point(a, 0, " a", :black, :left, :bottom) 
       point(a + b, 0, "a+b  ", :black, :right, :bottom)
       point(a, c, "(a,c)", :black, :right)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その276)

2023年06月12日 | Julia

算額(その276)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(262)
長野県上水内郡信州新町日名 日置神社 明治44年(1911)

正三角形に円が内接している。三角面冪(正三角形の一辺の平方)が 64 平方寸,外積(正三角形と内接円の間の面積)が 12.9 平方寸のとき,内接円の直径を求めよ。

三角率(正三角形の一辺の長さを a としたときの正三角形の面積 = a^2 *(√3/4) における √3/4 = 0.4330127018922193)の近似値を 0.433,円積率(直径が b のときの円の面積 = (b/2)^2 * π = b^2 * (π/4) における π/4 = 0.7853981633974483)の近似値を 0.7 とするとあるが,この近似値計算は基本的に間違っている。

正三角形の一辺の長さを a とすれば,内接円の半径 r は正確に a/2√3 である
外積は 12.9 ではなく 10.957652101956466 = √3/4 * a^2 - pi *  (a/2√3)^2 なのだから。

   三角形の一辺の長さ = 8.000000 寸;  内接円の直径 = 4.618802 寸

include("julia-source.txt");

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = sqrt(64)
   r = a / 2√3
   @printf("三角形の一辺の長さ = %.6f 寸;  内接円の直径 = %.6f 寸\n", a, 2r)
   plot([a/2, 0, -a/2, a/2], [0, √3a/2, 0, 0], color=:black, lw=0.5)
   circle(0, r, r, :green)
   if more
       point(a/2, 0, "a/2  ", :black, :right, :bottom)
       point(0, a / 2√3, "(0,a/2√3)")
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

算額(その275)

2023年06月12日 | Julia

算額(その275)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額(262)
長野県飯綱町 牟礼神社 明治31年(1898)

外球に円柱が内接している。甲球 1 個,乙球 2 個,丙球 2 個,丁球 1 個,戊球 1 個がそれぞれが隣の球(甲乙丙丁丙乙甲)の順に外接しており,外球に内接し円柱に外接している。また,外球を含めてすべての球の中心は同一平面上にある。

外球の直径が 85 寸,甲球の直径が 17 寸のとき,乙球の直径を求めよ。

問題は三次元で難しそうであるが,全ての球の中心が同一平面上にあるということから,上方からの透視図を考えると図のような二次元の問題であることがわかる。

それぞれの円の半径,中心座標を以下のようにする。
外円 r0, (0, 0) 既知 r0 = 85 // 2
甲円 r1, (0, r0 - r1) 既知 r1 = 17 // 2
乙円 r2, (x2, y2)
丙円 r3, (x3, y3)
丁円 r4, (0, r4 - r0)
戊円 r5, (0, r5 + 2r4 - r0)
以下の 8 本の方程式を解く。

include("julia-source.txt");

using SymPy
@syms r0::positive, r1::positive, r2::positive, r3::positive,
   r4::positive, r5::positive, x2::positive, y2::positive,
   x3::positive, y3::positive;

r0 = 85 // 2
r1 = 17 // 2
eq1 = x2^2 + (r0 - r1 - y2)^2 - (r1 + r2)^2 |> expand
eq2 = (x2 - x3)^2 + (y2 - y3)^2 - (r2 + r3)^2 |> expand
eq3 = x2^2 + (y2 - (r5 + 2r4 - r0))^2 - (r2 + r5)^2 |> expand
eq4 = x3^2 + (y3 - (r4 - r0))^2 - (r3 + r4)^2 |> expand
eq5 = x3^2 + (y3 - (r5 + 2r4 - r0))^2 - (r3 + r5)^2 |> expand
eq6 = x2^2 + y2^2 - (r0 - r2)^2 |> expand
eq7 = x3^2 + y3^2 - (r0 - r3)^2 |> expand
eq8 = r1 + r4 + r5 - r0 |> expand;

res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8], (r2, r3, r4, r5, x2, y2, x3, y3))

   1-element Vector{NTuple{8, Sym}}:
    (10, 170/11, 85/4, 51/4, 10*sqrt(3), 55/2, 170*sqrt(3)/11, 85/22)

外円 = 42.500;  甲 = 8.500;  乙 = 10.000;  丙 = 15.455;  丁 = 21.250;  戊 = 12.750
x2 = 17.321;  y2 = 27.500;  x3 = 26.768;  y3 = 3.864

すなわち,乙円(乙球)の直径は 20 寸である。

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r0 = 85 // 2
   r1 = 17 // 2
   (r2, r3, r4, r5, x2, y2, x3, y3) = res[1]
   # (r2, r3, r4, r5, x2, y2, x3, y3) = [19, 20, 21, 22, 20, 20, 20, -20]
   @printf("外円 = %.3f;  甲 = %.3f;  乙 = %.3f;  丙 = %.3f;  丁 = %.3f;  戊 = %.3f\n", r0, r1, r2, r3, r4, r5)
   @printf("x2 = %.3f;  y2 = %.3f;  x3 = %.3f;  y3 = %.3f\n", x2, y2, x3, y3)
   plot()
   circle(0, 0, r0, :black)
   circle(0, r0 - r1, r1, :green)
   circle(x2, y2, r2, :red)
   circle(-x2, y2, r2, :red)
   circle(x3, y3, r3, :blue)
   circle(-x3, y3, r3, :blue)
   circle(0, r4 - r0, r4, :magenta)
   circle(0, r5 + 2r4 - r0, r5, :orange)
   if more
       point(r0, 0, "r0 ", :black, :right, :bottom)
       point(0, r0 - r1, " 甲:r1\n r0-r1", :green, :left, :bottom)
       point(x2, y2, " 乙:r2\n (x2,y2)", :red, :center, :bottom)
       point(x3, y3, " 丙:r3\n (x3,y3)", :blue, :center, :bottom)
       point(0, r4 - r0, " 丁:r4\n r4-r0", :magenta, :left, :bottom)
       point(0, r5 + 2r4 - r0, " 戊:r5\n r5+2r4-r0", :orange, :left, :bottom)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

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

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