裏 RjpWiki

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

算額(その86)

2022年12月29日 | Julia

算額(その86)

福島県田村郡三春町平沢担橋 諏訪神社 大正15年(1926)8月
http://www.wasan.jp/fukusima/miharusuwa.html

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額
長野県松本市筑摩 筑摩神社 明治6年(1873)
と同じ(求めるものが違うだけ)

外円の中に「圭」と径が 3 寸の等円が 3 個入っている。外円の径を求めよ。

「圭」とは図のような細長い二等辺三角形のことである。

外接円の半径 R だけならば公式で簡単に求めることができる。等円の半径を r とすれば,内接する三角形の各辺の中点から外接円までの距離(「矢」という)を a', b', c' とすると,

a' + b' + c' = 2R - r … (1)
2a'b'c' = r^2R … (2)

a' = c' = 2r
b' = 2R - 5r

(2) に代入して
8 * r^2 * (2R - 5r) = r^2 * R
これより R が求まる。

using SymPy

@syms R::positive, x::positive, y::positive;
r = 3//2
eq0 = 8*r^2*(2R-5r) - (r^2)*R;

solve(eq0, R) |> println

   Sym[4]

R = 4 である。

次に,点 C の x 座標を求める。y 座標は 1/2 - R で,外接円の円周上にあるので以下を解く。

@syms x1
solve(x1^2 + (1//2-4)^2 - 16) |> println

   Sym[-sqrt(15)/2, sqrt(15)/2]

C は (sqrt(15)/2, 1/2-R), A は (-sqrt(15)/2, 1/2-R) である。

最後に,右の等円の中心座標を求める。外円に接することと,原点から (x, y) を結ぶ直線と BC が直交することから以下の 2 式を得る。

@syms x, y
R, r = 4, 3//2
eq1 = x^2 + y^2 - (R - r)^2;
eq2 = y/x * (4-1//2+R)/(sqrt(Sym(15))//2) - 1;

solve([eq1, eq2], (x, y))

   2-element Vector{Tuple{Sym, Sym}}:
    (-5*sqrt(15)/8, -5/8)
    (5*sqrt(15)/8, 5/8)

x 座標は 5*sqrt(15)/8, y 座標は 5/8 である。

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")
   r = 3/2
   (R, x) = (4, 2)
   plot()
   circle(0, 0, R)
   circle(5*sqrt(15)/8, 5/8, r, :blue)
   circle(-5*sqrt(15)/8, 5/8, r, :blue)
   circle(0, -R+1/2+r, r, :green)
   segment(0, R, -sqrt(15)/2, 1/2-R)
   segment(0, R, sqrt(15)/2, 1/2-R)
   segment(-sqrt(15)/2, 1/2-R, sqrt(15)/2, 1/2-R)
   if more
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(sqrt(15)/2, 1/2-R, " C", :red)
       point(-sqrt(15)/2, 1/2-R, "A ", :red, :right)
       point(0, R, "  B", :red, :bottom)
       segment(0, -R, 0, 1/2-R, :magenta)
       point(0, 1/4-R, "  b'", :magenta, :top, :left, mark=false)
       point(5*sqrt(15)/8, 5/8, "(x, y)", :blue)
   end
end;

 

 

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

算額(その85)

2022年12月29日 | Julia

算額(その85)

福島県田村郡三春町平沢担橋 諏訪神社 大正15年(1926)8月
http://www.wasan.jp/fukusima/miharusuwa.html

交差する 2 個の外円の中に,甲円 3 個,乙円 2 個が入っている。乙円の径が 1 寸のとき,甲円の径はいくつか。

甲円の半径を r として方程式を解く。


using SymPy

@syms r::positive;
eq1 = (r + 1//2)^2 + r^2 - (2r - 1//2)^2
solve(eq1)[1] |> println

   3/2

甲円の径は 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/2
   plot()
   circle(0, 0, r)
   circle(0, 2r, r)
   circle(0, -2r, r)
   circle(0, r, 2r, :blue)
   circle(0, -r, 2r, :blue)
   circle(r + 1/2, 0, 1/2, :green)
   circle(-r - 1/2, 0, 1/2, :green)
   if more
       point(0, 2r, "2r ", :red, :top, :right)
       point(0, r, "r ", :red, :top, :right)
       point(r, 0, "r ", :red, :top, :right)
       point(r+1, 0, "  r+1", :red, :top, :left)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   end
end;

 

 

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

算額(その84)

2022年12月29日 | Julia

算額(その84)

福島県田村郡三春町平沢担橋 諏訪神社 大正15年(1926)8月
http://www.wasan.jp/fukusima/miharusuwa.html

二本の線分に挟まれて,3個の円がある。大円,中円の径を 4, 2 としたとき,小円の径を求めよ。

大円,中円の半径を 2, 1 として,図のよう記号を定め方程式を解く。

using SymPy

@syms x1::positive, r1::positive, x2::positive, x3::positive;
eq1 = (x2 - x1)^2 + (1 - r1)^2 - (1 + r1)^2
eq2 = (x3 - x2)^2 + (2 - 1)^2 - (2 + 1)^2
eq3 = (2 - r1)/(x3 - x1) - (1 - r1)/(x2 - x1)
eq4 = r1/x1 - 1/x2
solve([eq1, eq2, eq3, eq4], (r1, x1, x2, x3))

   1-element Vector{NTuple{4, Sym}}:
    (1/2, sqrt(2), 2*sqrt(2), 4*sqrt(2))

小円の径は 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 draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, x1, x2, x3) = (1/2, sqrt(2), 2*sqrt(2), 4*sqrt(2))
   println("小円の径(直径) = $(2r1)")
   plot()
   circle(x1, r1, r1)
   circle(x2, 1, 1, :blue)
   circle(x3, 2, 2, :green)
   hline!([0], color=:black, lw=0.5)
   θ = atan(2, x3)
   y = 6tan(2θ)
   plot!([0, 6], [0, y], color=:black, lw=0.5)
   if more
       point(x1, r1, "(x1,r1)", :red, :top, :center)
       point(x2, 1, "(x2,2)", :blue, :top, :center)
       point(x3, 2, "(x3,4)", :green, :top, :center)
       point(6, y, "(6, y)", :black)
   end
end;

   小円の径(直径) = 1.0

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

算額(その83)

2022年12月29日 | Julia

算額(その83)

福島県田村郡三春町平沢担橋 諏訪神社 大正15年(1926)8月
http://www.wasan.jp/fukusima/miharusuwa.html

股が六寸の直角三角形に円が 6 個収まっている。鉤の長さはいくつか。

等円の半径を r, 鉤を x とする。上の円と右の円の中心から弦への距離が r であるとして方程式を解く。

using SymPy

function distance(x1, y1, x2, y2, x0, y0)
p1, p2 = sympy.Point(x1, y1), sympy.Point(x2, y2)
l = sympy.Line(p1, p2)
l.distance(sympy.Point(x0, y0))
end;

@syms x::positive, r::positive;
eq1 = distance(6, 0, 0, x, 7r, r) - r
eq2 = distance(6, 0, 0, x, r, 5r) - r 
solve([eq1, eq2], (r, x))

   4-element Vector{Tuple{Sym, Sym}}:
    (17/23 - sqrt(13)/23, 4)
    (sqrt(13)/23 + 17/23, 4)
    (-75*sqrt(2)*sqrt(14 - 3*sqrt(3))/2068 - 9*sqrt(6)*sqrt(14 - 3*sqrt(3))/1034 - 75*sqrt(3)/2068 + 1497/2068, 9/2 - 3*sqrt(3)/2)
    (-9*sqrt(6)*sqrt(3*sqrt(3) + 14)/1034 + 75*sqrt(3)/2068 + 75*sqrt(2)*sqrt(3*sqrt(3) + 14)/2068 + 1497/2068, 3*sqrt(3)/2 + 9/2)

2番目が適切な解である。鉤は 4 寸である。

(sqrt(13)/23 + 17/23, 4)  # r, x

   (0.8958935337158256, 4)

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, x) = (17/23 - sqrt(13)/23, 4)
   println("径(直径) = $(2r);  鉤 = $x")
   plot([0, 6, 0, 0], [0, 0, x, 0])
   for i in 0:3
       circle(i*2r + r, r, r)
   end
   for i in 0:2
       circle(r, i*2r + r, r)
   end
   point(r, 5r, "(r,5r)")
   point(7r, r, "(7r,r)")
   point(0, x, "   x", :green, :bottom)
   hline!([0, 2r, 4r, 6r], color=:black, lw=0.5)
   vline!([0, 2r, 4r, 6r, 8r], color=:black, lw=0.5)
end;

   径(直径) = 1.1647346716987834;  鉤 = 4

 

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

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

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