裏 RjpWiki

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

算額(その257)

2023年06月02日 | Julia

算額(その257)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額2(112)
長野県長野市信更町田野口 清水神社 文政11年(1828)

正方形内に斜線で区切られた部分に円と正方形がある。円の径と内側の正方形の一辺の長さが等しい。外側の正方形の一辺の長さが 100 寸のとき,円の径を求めよ。

外側の正方形の対角座標を (0, 0), (x, x) とする。
円の半径と中心座標を r, (x - r, x - r)
内側の正方形の対角座標を (0, 0), (r, r) とする。

以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms x::positive, r::positive;

x = 100
eq = 2((x - r) - 2r)^2 - r^2
res = solve(eq, r)[1]
2res |> println

   2*x*(6 - sqrt(2))/17

最初の解が適切である。
外側の正方形の一辺の長さに (12 - 2√2)/17 を掛けて円の直径を得る。

円の直径は 53寸9分5厘あまりである。

100 * (12 - 2√2)/17

   53.950428677963586

using Plots

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   x = 100
   r = x * (6 - √2)/17
   println("円の直径 = $(2r)")
   plot([0, x, x, 0, 0], [0, 0, x, x, 0], linecolor=:black, linewidth=0.5)
   rect(0, 0, 2r, 2r, :aliceblue)
   circlef(x - r, x - r, r, :pink)
   segment(4r - x, x, x, 4r - x)
   if more == true
       point(x, x, "(x,x)", :black, :right, :top)
       point(2r, 2r, " (2r,2r)", :black, :right, :top)
       point(x - r, x - r, "(x-r,x-r)", :red, :center)
       point(x, 4r-x, "(x,4r-x) ", :black, :right)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

 

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

算額(その256)

2023年06月02日 | Julia

算額(その256)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額4(186)
長野県長野市北尾張部 連開庵 嘉永6年(1853)

正方形内に四分円,半円,天円,地円,人円が入っており,互いに内接・外接している。
地円,人円の径がそれぞれ 1寸4分4厘,1 寸のとき天円の径を求めよ。

四分円の半径を r0 とする。半円の半径は r0/2 である。
天円の半径と中心座標を r1, (x1, r0 - r1)
地円の半径と中心座標を r2, (x2, r2) とする。r2 = 1.44 である。
人円の半径と中心座標を r3, (r3, y3) とする。r3 = 1 である。

以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms r0::positive, r1::positive, x1::positive, r2::positive, x2::positive, r3::positive, y3::positive;

r2 = 144//200
r3 = 100//200
eq1 = (r0 - x1)^2 + r1^2 - (r0 - r1)^2
eq2 = (r0 - x1)^2 + (r0 - r1 - r0//2)^2 - (r1 + r0//2)^2
eq3 = (r0 - r3)^2 + (r0 - y3)^2 - (r0 + r3)^2
eq4 = (r0 - x2)^2 + (r0 - r2)^2 - (r0 + r2)^2
eq5 = (x2 - r3)^2 + (y3 - r2)^2 - (r2 + r3)^2
res = solve([eq1, eq2, eq3, eq4, eq5], (r0, r1, x1, x2, y3))

   4-element Vector{NTuple{5, Sym}}:
    (3*sqrt(2)/5 + 181/100 + 11*sqrt(120*sqrt(2) + 241)/100, 3*sqrt(2)/20 + 181/400 + 11*sqrt(120*sqrt(2) + 241)/400, 3*sqrt(2)/5 + 181/100 + 11*sqrt(120*sqrt(2) + 241)/100 + sqrt(660*sqrt(2)*sqrt(120*sqrt(2) + 241) + 18120*sqrt(2) + 34561 + 1991*sqrt(120*sqrt(2) + 241))/100, -sqrt(120*sqrt(2) + 241)/100 + 49/100 + 3*sqrt(2)/5, sqrt(3*sqrt(2)/250 + 241/10000) + 71/100 + 3*sqrt(2)/5)
    (3*sqrt(2)/5 + 181/100 + 11*sqrt(120*sqrt(2) + 241)/100, 3*sqrt(2)/20 + 181/400 + 11*sqrt(120*sqrt(2) + 241)/400, -sqrt(660*sqrt(2)*sqrt(120*sqrt(2) + 241) + 18120*sqrt(2) + 34561 + 1991*sqrt(120*sqrt(2) + 241))/100 + 3*sqrt(2)/5 + 181/100 + 11*sqrt(120*sqrt(2) + 241)/100, -sqrt(120*sqrt(2) + 241)/100 + 49/100 + 3*sqrt(2)/5, sqrt(3*sqrt(2)/250 + 241/10000) + 71/100 + 3*sqrt(2)/5)
    (-11*sqrt(120*sqrt(2) + 241)/100 + 3*sqrt(2)/5 + 181/100, -11*sqrt(120*sqrt(2) + 241)/400 + 3*sqrt(2)/20 + 181/400, -11*sqrt(120*sqrt(2) + 241)/100 - sqrt(-1991*sqrt(120*sqrt(2) + 241) - 660*sqrt(2)*sqrt(120*sqrt(2) + 241) + 18120*sqrt(2) + 34561)/100 + 3*sqrt(2)/5 + 181/100, sqrt(120*sqrt(2) + 241)/100 + 49/100 + 3*sqrt(2)/5, -sqrt(3*sqrt(2)/250 + 241/10000) + 71/100 + 3*sqrt(2)/5)
    (-11*sqrt(120*sqrt(2) + 241)/100 + 3*sqrt(2)/5 + 181/100, -11*sqrt(120*sqrt(2) + 241)/400 + 3*sqrt(2)/20 + 181/400, -11*sqrt(120*sqrt(2) + 241)/100 + sqrt(-1991*sqrt(120*sqrt(2) + 241) - 660*sqrt(2)*sqrt(120*sqrt(2) + 241) + 18120*sqrt(2) + 34561)/100 + 3*sqrt(2)/5 + 181/100, sqrt(120*sqrt(2) + 241)/100 + 49/100 + 3*sqrt(2)/5, -sqrt(3*sqrt(2)/250 + 241/10000) + 71/100 + 3*sqrt(2)/5)

二番目の解が適切である。

天円の直径は 2寸4分4厘あまりである。

2res[2][2].evalf()

   2.44388710953848

   r0 = 4.88777;  r1 = 1.22194;  x1 = 1.43160;  x2 = 1.13587;  y3 = 1.76119
   天円の直径 = 2.44388710953848

using Plots
using Printf

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r0, r1, x1, x2, y3) = res[2]
   @printf("r0 = %.5f;  r1 = %.5f;  x1 = %.5f;  x2 = %.5f;  y3 = %.5f\n", r0, r1, x1, x2, y3)
   println("天円の直径 = $(2r1.evalf())")
   plot([0, r0, r0, 0, 0], [0, 0, r0, r0, 0], linecolor=:black, linewidth=0.5)
   circle(r0, r0, r0, beginangle=180, endangle=270)
   circle(r0, r0//2, r0//2, :blue, beginangle=90, endangle=270)
   circle(x1, r0 - r1, r1, :orange)
   circle(x2, r2, r2, :magenta)
   circle(r3, y3, r3, :green)
   if more == true
       point(r0, r0, "(r0,r0)", :black, :right, :bottom)
       point(r0, r0/2, "(r0,r0/2)", :blue, :right)
       point(x1, r0 - r1, " 天円:r1\n (x1,r0-r1)", :orange)
       point(x2, r2, " 地円:r2\n (x2,r2)", :magenta)
       point(r3, y3, "\n 人円:r3\n (r3,y3)", :green, :center, :top)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   else
      plot!(showaxis=false)
   end
end;

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

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

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