裏 RjpWiki

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

算額(その105)

2023年01月23日 | Julia

算額(その105)

福島県船引町 蚕養国神社 明治24年(1891)2月
http://www.wasan.jp/fukusima/kogaikuni.html

直線の上に 2 種類の円が 3 個ずつある。下の小円の中心間の距離(子)を 1 とすると,大円の径はいくつか。

図のように記号を定め,方程式を解く。方程式中に分数が出てくると計算時間がかかりすぎるので,子を 2 とし,各円の半径について方程式を立てる。

using SymPy
@syms r1::positive, r2::positive, y1::positive;

eq1 = r1^2 + (2r1 + r2 - y1)^2 - (r1 + r2)^2;
eq2 = (r1 - 1)^2 + (y1 - r2)^2 - (r1 + r2)^2;
eq3 = 1 + (r1 - r2)^2 - (r1 + r2)^2;

solve([eq1, eq2, eq3], (r1, r2, y1))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (1, 1/4, 3/2)

大円の半径は 1,直径は 2 である。子と大円の直径が同じである。子が 1 なら,大円の直径は 1 である。

算額では答えとして,「大円径4寸」とあるが,その左の「術」では「子が大円の径」と書いてある。「術」のほうが正しい。

using Plots
using Printf

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

function point(x, y, string="", color=:green, position=:left, vertical=:top; mark=true)
   mark && scatter!([x], [y], color=color, markerstrokewidth=0)
   annotate!(x, y, text(string, 10, position, color, vertical))
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")
   (r1, r2, y1) = (1, 1/4, 3/2)
   plot()
   circle(0, r1, r1, :blue)
   circle(-r1, y1, r1, :blue)
   circle(r1, y1, r1, :blue)
   circle(0, 2r1 + r2, r2)
   circle(1, r2, r2)
   circle(-1, r2, r2)
   hline!([0], color=:black, lw=0.5)
    if more
       point(0, r1, " r1", :blue)
       point(r1, y1, "(r1,y1)", :blue)
       point(0, y1, " y1", :blue)
       point(0, 2r1 + r2, " 2r1+r2", :red)
       point(1, r2, " (1,r2)", :red)
       vline!([0], color=:black, lw=0.5)
    end
end;

 

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

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

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