裏 RjpWiki

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

算額(その315)

2023年07月06日 | Julia

算額(その315)

(5) 京都府宮津市天橋立文殊 知恩寺文殊堂 文政元年(1818)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.

p02-03 特集「算額」(杉浦).indd
https://www.s-coop.net/lifestage/backnumber/2011/pdf/1106_02-03.pdf

小円の直径を 8 cm,大円の直径を 16 cm とする。色をつけた部分の面積を求めよ。

似た図形を取り上げた算額は,京都府宮津市天橋立の知恩寺文殊堂に文政元年(1818)に奉納されたものがある(算額その28)。それは大円と小円の径を求めよというものである。

図形は点対称・線対称なので,角度 30° から 90°までの該当図形の面積を求めて 6 倍すればよい。

図中の下の灰色の三日月様の面積は,その上のピンクの領域の面積と同じである。求める灰色の領域の面積は大円の面積の 1/3 から小円の面積の 1/2 を引いたものである。

求める面積は 251.32741228718342 平方センチメートル

(r1, r2) = (8, 4)
pi*(r1^2/3 - r2^2/2) * 6 

   251.32741228718342

include("julia-source.txt");

function transform(x, y; deg=0, dx=0, dy=0)
   (x, y) = [cosd(deg) -sind(deg); sind(deg) cosd(deg)] * [x, y]
   return (x .+ dx, y .+ dy)
end;

function arc(r; beginangle=0, endangle=360)
   n = round(Int, abs(endangle - beginangle)r/4)
   x = []
   y = []
   for θ in range(beginangle, endangle, length=n)
       append!(x, cosd(θ))
       append!(y, sind(θ))
   end
   #append!(x, x[1])
   #append!(y, y[1])
   return (r .* x, r .* y)
end;

using Plots

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2) = (8, 4)
   plot()
   if more
       circle(0, 0, r1)
       rotate(0, r1, r1)
       rotate(0, r1 + r2, r2)
       (x1, y1) = arc(r1, beginangle=90, endangle=-30)
       (x1, y1) = transform(x1, y1, dy=r1)
       (x2, y2) = arc(r2, beginangle=-90, endangle=90)
       (x2, y2) = transform(x2, y2, dy=r1+r2)
       (x3, y3) = arc(r1, beginangle=30, endangle=90)
       plot!([x3; x2; x1], [y3; y2; y1], linecolor=:black, linewidth=0.5, seriestype=:shape, fillcolor=:gray)
       (x4, y4) = arc(r1, beginangle=30, endangle=90)
       append!(x4, x4[1])
       append!(y4, y4[1])
       plot!(x4, y4, linecolor=:black, linewidth=0.5, seriestype=:shape, fillcolor=:pink)
       (x5, y5) = transform(x4, y4, deg=60, dx=r1√3/2, dy=-r1/2)
       plot!(x5, y5, linecolor=:black, linewidth=0.5, seriestype=:shape, fillcolor=:gray)
       vline!([0], color=:black, lw=0.5)
       hline!([0], color=:black, lw=0.5)
   else
       rotatef(0, r1, r1, :gray)
       rotatef(0, r1 + r2, r2, :white)
       circlef(0, 0, r1, :white)
       rotate(0, r1, r1, :red)
       rotate(0, r1 + r2, r2, :red)
       circle(0, 0, r1, :red)
       (x4, y4) = arc(r1, beginangle=30, endangle=90)
       (x5, y5) = transform(x4, y4, deg=60, dx=r1√3/2, dy=-r1/2)
       (x6, y6) = transform(x4, y4, deg=-120, dy=r1)
       x7 = [x5; x6]
       y7 = [y5; y6]
       plot!(x7, y7, linecolor=:red, linewidth=0.5, seriestype=:shape, fillcolor=:gray)
       (x8, y8) = transform(x7, y7, deg=120)
       plot!(x8, y8, linecolor=:red, linewidth=0.5, seriestype=:shape, fillcolor=:gray)
       (x9, y9) = transform(x7, y7, deg=240)
       plot!(x9, y9, linecolor=:red, linewidth=0.5, seriestype=:shape, fillcolor=:gray)
       plot!(showaxis=false)
   end
end;

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

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

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