裏 RjpWiki

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

算額(その90)

2023年01月05日 | Julia

算額(その90)

千葉県君津市 神野寺 万延2(1861)年2月
http://www.wasan.jp/chiba/jinyaji1.html

3 種類の円が図のように配置されている。大円,中円の径(直径)が □ 寸,□ 寸のとき,小円の径を求めよ。

大円,中円の径が不鮮明で読み取れないので,それぞれの半径を r1 = 3, r2 = 2 とする(任意に設定できるわけではない)。
大円,中円の中心座標を (0, y1), (x2, r2)とする。

それぞれの円が外接していることに基づく方程式を解く。

using SymPy

@syms r3::positive, x2::positive, y1::positive;
r1 = 3
r2 = 2
eq1 = (x2 - r3)^2 + (r2 - r3)^2 - (r2 + r3)^2
eq2 = x2^2 + (y1 - r2)^2 - (r1 + r2)^2
eq3 = r3^2 + (y1 - r3)^2 - (r1 + r3)^2
solve([eq1, eq2, eq3], (r3, y1, x2))

   2-element Vector{Tuple{Sym, Sym, Sym}}:
    (8 - 4*sqrt(3), 5, 4)
    (4*sqrt(3) + 8, 5, 4)

最初のものが適解である。小円の半径は 8 - 4*sqrt(3) = 1.0717967697244912 になる。

using Plots

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
 θ = beginangle:0.1:endangle
 x = r.*cosd.(θ)
 y = r.*sind.(θ)
 plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;

function point(x, y, string="", color=:green, position=:left, vertical=:top; fontsize=10, mark=true)
  mark && scatter!([x], [y], color=color, markerstrokewidth=0)
  annotate!(x, y, text(string, fontsize, vertical, position, color))
end;

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r3, y1, x2) = (8 - 4*sqrt(3), 5, 4)
   (r1, r2) = (3, 2)
   println("小円の半径は $(8 - 4*sqrt(3))")
   plot()
   circle(0, y1, r1, :green)
   circle(x2, r2, r2)
   circle(-x2, r2, r2)
   circle(r3, r3, r3, :blue)
   circle(-r3, r3, r3, :blue)
   hline!([0], color=:black, lw=0.5)
   if more
       vline!([0], color=:black, lw=0.5)
       point(0, y1, "y1 ", :green, :bottom, :right)
       point(r3, r3, "(r3,r3)", :blue, :top)
       point(x2, r2, "(x2,r2)", :red, :top)
   end
end;

   小円の半径は 1.0717967697244912

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

算額(その89)

2023年01月05日 | Julia

算額(その89)

栃木県足利市家富町 鑁阿寺 明治17年(1884)3
http://www.wasan.jp/totigi/bannaji2.html

3 種類の円が図のように配置されている。中円,小円の径(直径)が 2 寸,1 寸のとき,大円の径を求めよ。

大円の半径を r とする。中円,小円の半径を 2, 1 とする。

大円と中円が外接していることに基づく方程式を解く。

using SymPy

@syms r::positive;
eq = (1 + r)^2 + (1 + 2)^2 - (2 + r)^2
r = solve(eq)[1]
println(r)

   3

using Plots

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
 θ = beginangle:0.1:endangle
 x = r.*cosd.(θ)
 y = r.*sind.(θ)
 plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;

function point(x, y, string="", color=:green, position=:left, vertical=:top; fontsize=10, mark=true)
  mark && scatter!([x], [y], color=color, markerstrokewidth=0)
  annotate!(x, y, text(string, fontsize, vertical, position, color))
end;

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   r = 3
   println("大円の半径は $r")
   plot()
   circle(0, 3, 2, :green)
   circle(0, -3, 2, :green)
   circle(0, 0, 1, :blue)
   circle(1 + r, 0, r)
   circle(-1 - r, 0, r)
   if more
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(0, 3, "3 ", :green, :bottom, :right)
       point(1 + r, 0, " 1+r", :red, :top, :left)
       point(1, 0, " 1", :red, :top, :left)
       point(0, 0, " 0", :blue, :top, :left)
   end
end;

   大円の半径は 3

 

 

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

算額(その88)

2023年01月05日 | Julia

算額(その88)

福島県三春町 津島神社 明治16年(1883)1月
http://www.wasan.jp/fukusima/tusima.html

3 種類の円が図のように配置されている。それぞれの円の径を求めよ。

算額の図を左右反転させて以下の図のように,大円の半径を r1 = 1,中円,小円の半径を r2, r3,小円の中心座標を (x3, y3) とする。


それぞれの円が外接していることに基づく方程式が 3 本立つが,未知数の個数が 4 個ある。
算額の問題文が不鮮明であるが,中円か小円の半径が既知としなければ方程式が解けないので,r2 を決めて(以下では 5//10 として)解く。

using SymPy

@syms y1::positive, r1::positive, x2::positive, r2::positive, x3::positive, y3::positive, r3::positive;
r1 = 1
r2 = 5//10
x2 = r2
x3 = 2x2
eq1 = x2^2 + y1^2 - (r2 + r1)^2
eq2 = x3^2 + (y1 - y3)^2 - (r1 + r3)^2
eq3 = (x3 - x2)^2 + y3^2 - (r2 + r3)^2
solve([eq1, eq2, eq3], (y1, y3, r3))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (sqrt(2), 3*sqrt(2)/7, 2/7)

大円,中円の半径を 1, 5/10 とすると,小円の半径は 2/7 である。

using Plots

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
 θ = beginangle:0.1:endangle
 x = r.*cosd.(θ)
 y = r.*sind.(θ)
 plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;

function point(x, y, string="", color=:green, position=:left, vertical=:top; fontsize=10, mark=true)
  mark && scatter!([x], [y], color=color, markerstrokewidth=0)
  annotate!(x, y, text(string, fontsize, vertical, position, color))
end;

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (y1, y3, r3) = (sqrt(2), 3*sqrt(2)/7, 2/7)
   r1 = 1
   r2 = 5//10
   x2 = r2
   x3 = 2x2
   println("大円,中円の半径が $(2r1), $(2r2) のとき,小円の半径は $(2Rational(2, 7)) = $(2r3)")
   plot()
   circle(0, y1, r1, :green)
   circle(-x2, 0, r2)
   circle(x2, 0, r2)
   circle(3x2, 0, r2)
   circle(x3, y3, r3, :blue)
   if more
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(0, y1, "y1 ", :green, :bottom, :right)
       point(x2, 0, "x2", :red, :top)
       point(-x2, 0, "-x2", :red, :top)
       point(3x2, 0, "3x2", :red, :top)
       point(x3, y3, "(x3,y3)", :blue, :top)
   end
end;

   大円,中円の半径が 2, 1//1 のとき,小円の半径は 4//7 = 0.5714285714285714

 

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

算額(その87)

2023年01月05日 | Julia

算額(その87)

福島県二本松市杉沢 愛宕神社
http://www.wasan.jp/fukusima/atago.html

外円の中に正三角形が入っている。小さい方の一辺の長さが1寸のとき,大きい方の一辺の長さはいかほどか。

大きい方の一辺の長さを2,小さい方の一辺の長さを x として,以下のように記号を定める。

円の半径は 2/√3,c は AB の中点である。以下順に長さが決まる。

AB = 2
Ac = 1
yc = 1/2
Ay = √3/2
y = 1/(2√3)

(x+1/2, y) が円周上にあるので以下の方程式を解き x を求める。

using SymPy

@syms x::positive, y::positive;
y = 1/(2*sqrt(Sym(3)))
eq = (x + 1//2)^2 + y^2 -(y +sqrt(Sym(3))/2)^2
x = solve(eq)[1];
(x, y) |> println

   (-1/2 + sqrt(5)/2, sqrt(3)/6)

x が 1 寸ならば大きい正三角形の一辺は 2 / (-1/2 + sqrt(5)/2) = 1 + sqrt(5) = 3寸2分3厘6毛である。

2 / (-1//2 + sqrt(Sym(5))/2) |> simplify

   1 + sqrt(5)

1+√5

   3.23606797749979

算額では,「5個を開平し1個を加える」ことで三寸二分三厘を得ている。

using Plots

function circle(ox, oy, r, color=:red; beginangle=0, endangle=360)
 θ = beginangle:0.1:endangle
 x = r.*cosd.(θ)
 y = r.*sind.(θ)
 plot!(ox .+ x, oy .+ y, color=color, linewidth=0.5)
end;

function point(x, y, string="", color=:green, position=:left, vertical=:top; fontsize=10, mark=true)
  mark && scatter!([x], [y], color=color, markerstrokewidth=0)
  annotate!(x, y, text(string, fontsize, vertical, position, color))
end;

function segment(x1, y1, x2, y2, color=:black; linestyle=:solid, linewidth=0.5)
plot!([x1, x2], [y1, y2], color=color, linestyle=linestyle, linewidth=linewidth)
end;

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (x, y) = (-1/2 + sqrt(5)/2, sqrt(3)/6)
   r = 2/sqrt(3)
   (Ax, Ay) = (0, r)
   (Bx, By) = (r*cosd(30), r*sind(-30))
   (Cx, Cy) = (-r*cosd(30), r*sind(-30))
   (ax, ay) = ((1 + x)/2, y + sqrt(3)/2*x)
   (bx, by) = (1/2 + x, y)
   (cx, cy) = (1/2, y)
   plot()
   circle(0, 0, r, :black)
   plot!([Ax, Bx, Cx, Ax], [Ay, By, Cy, Ay])
   plot!([ax, bx, cx, ax], [ay, by, cy, ay])
   plot!(-[ax, bx, cx, ax], [ay, by, cy, ay])
   if more
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(Ax, Ay, "   A", :black, :bottom)
       point(Bx, By, " B", :black)
       point(Cx, Cy, "C ", :black, :right)
       point(ax, ay, "  a", :black, :bottom)
       point(bx, by, " b:(1/2+x, y)", :black)
       point(cx, cy, "c", :black, :right)
       point(0, y, " y", :black)
       point(0, 0, " o", :black)
   end
end;

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

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

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