裏 RjpWiki

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

算額(その232)

2023年05月15日 | Julia

算額(その232)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額3(222)
長野県東筑摩郡筑北村青柳 碩水寺豊川稲荷社 慶応4年(1868)

団扇の中に大円 2 個、小円 1 個がある。扇の径が 9 寸、大円の径が 4寸5分のとき、小円の径はいかほどか。

大円の半径と中心座標を r1, (x1, y1), r1 = r0//2, y1 = 0
小円の半径と中心座標を r2, (0, r0 - r2)
団扇面を切り欠く円の中心座標を (0, y), y < 0
団扇面の円と扇面を切り欠く円の交点座標を (x0, y0)
とし,連立方程式を解く。
なお,団扇面を切り欠く円の半径,中心については条件式が与えられていないので解は y を含む式になる。

include("julia-source.txt")

using SymPy
@syms r0::positive, r1::positive, y1,
     r2::pisitive, r::positive, y::negative,
     x0::positive, y0::negative;
r0 = 9 
r1 = r0 // 2
y1 = 0
y0 = -sqrt(r0^2 - x0^2)
eq1 = r1^2 + (r0 - r2 -y1)^2 - (r1 + r2)^2
eq3 = r1^2 + (y1 - y)^2 - (r + r1)^2
eq5 = sqrt(r^2 - x0^2) + y + sqrt(r0^2 - x0^2)
res = solve([eq1, eq3, eq5], (r2, r, x0))

   1-element Vector{Tuple{Sym, Sym, Sym}}:
    (3, sqrt(4*y^2 + 81)/2 - 9/2, -9*sqrt(12*y^2 - 18*sqrt(4*y^2 + 81) - 162)/(4*y))

たとえば y = -9 のとき,
r2 = 3
r  = 5.562305898749054
x0 = 5.2900672706322585
になる。

y = -9
(3, sqrt(4*y^2 + 81)/2 - 9/2, -9*sqrt(12*y^2 - 18*sqrt(4*y^2 + 81) - 162)/(4*y))

   (3, 5.562305898749054, 5.2900672706322585)

   小円半径 = 3.00000
   団扇面の円を切り欠く円の中心 = (0, -9.00000);  半径 = 5.56231
   2円の交点 = (5.29007, -7.28115)

using Printf
using Plots

function draw(y, more)
   pyplot(size=(500, 500), grid=false, aspect_ratio=1, label="", fontfamily="IPAMincho")
   r0 = 9 
   r1 = 9//2
   y1 = 0
   (r2, r, x0) = (3, sqrt(4*y^2 + 81)/2 - 9/2, -9*sqrt(12*y^2 - 18*sqrt(4*y^2 + 81) - 162)/(4*y))
   y0 = -sqrt(r0^2 - x0^2)
   @printf("小円半径 = %.5f\n", r2)
   @printf("団扇面の円を切り欠く円の中心 = (0, %.5f);  半径 = %.5f\n", y, r)
   @printf("2円の交点 = (%.5f, %.5f)\n", x0, y0)
   θ = Int(round(atand((y0 - y)/x0), digits=0))
   plot()
   circle(0, 0, r0, :black)
   circle(0, r0 - r2, r2)
   circle(r1, y1, r1, :blue)
   circle(-r1, y1, r1, :blue)
   circle(0, y, r, :black, beginangle=θ, endangle=180 - θ)
   for deg = 90:10:180-θ
       plot!([-r*cosd(deg), 0, r*cosd(deg)], [r*sind(deg) + y, -r0, r*sind(deg) + y], color=:black, lw=2)
   end
   if more
       point(0, r0, " r0", :black, :left, :bottom)
       point(0, r0 - r2, " r0-r2", :red, :left, :bottom)
       point(x0, y0, "(x0,y0)")
       point(r1, y1, " r1", :blue)
       point(r0, y1, " r0 ", :black, :right)
       point(0.2r1, (2r0 - r2)/2, "小円", :red, mark=false)
       point(r1, r1/2, "大円", :blue, mark=false)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算額(その231) | トップ | 算額(その233) »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Julia」カテゴリの最新記事