裏 RjpWiki

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

算額(その1237)

2024年08月22日 | Julia

算額(その1237)

兵庫県西宮市社家町 復元 西宮神社 天保13年(1843)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円5個,外円,菱形

外円の中に,菱形 1 個,天円 1 個,地円 2 個,小円 1 個を容れる。菱形の対角線の長い方が 8 寸,短い方が 6 寸のとき,小円の直径はいかほどか。

以下の図は,与えられた条件によるものではない。

菱形の対角線の長い方を a,短い方を b
外円の半径と中心座標を R, (0, 0)
天円の半径と中心座標を r1, (0, r1 - R)
地円の半径と中心座標を r2, (x2, y2)
小円の半径と中心座標を r3, (0, R - r3)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, R::positive, r1::positive,
     r2::positive, x2::positive, y2::negative, r3::positive
R = r1 + b
eq5 = a^2 + (R - b)^2 - R^2
eq1 = dist2(0, R - 2b, a, R - b, 0, R - b, r3)
eq2 = dist2(0, R - 2b, a, R - b, x2, y2, r2)
eq3 = x2^2 + (y2 - r1 + R)^2 - (r1 + r2)^2
eq4 = x2^2 + y2^2 - (R - r2)^2;
res = solve([eq1, eq2, eq3, eq4, eq5], (r1, r2, x2, y2, r3))[2]

   ((a - b)*(a + b)/(2*b), b*(a - b)*(a + b)/a^2, (a - b)*(a + b)*sqrt(a^2 + b^2)/a^2, (a^2 - 3*b^2)/(2*b), a*b/sqrt(a^2 + b^2))

下図のように,菱形の対角線の長い方が 8 寸,短い方が 6 寸のとき,小円の直径は 2a*b/sqrt(a^2 + b^2) = 2.4 寸である。

「答」は「1 寸 4 分 2 厘有奇」となっているが,算額の「図」を見れば「菱形の対角線の長い方が 8 寸,短い方が 6 寸のとき」のものではない。このページの最初に掲載した図は「菱形の対角線の長い方が 8 寸,短い方が 3 寸のとき」のものである。「術」は,「(√2 - 1)*菱長*菱平/(菱長 + 菱平)」であるが,(「答」とは一致するが,)この計算式は適切とは思えない。

その他のパラメータは以下のとおりである。

  a = 4;  b = 3;  r1 = 1.16666666666667;  r2 = 1.3125;  x2 = 2.1875;  y2 = -1.83333333333333;  r3 = 2.4

function draw(a, b, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2, x2, y2, r3) = ((a - b)*(a + b)/(2*b), b*(a - b)*(a + b)/a^2, (a - b)*(a + b)*sqrt(a^2 + b^2)/a^2, (a^2 - 3*b^2)/(2*b), a*b/sqrt(a^2 + b^2))
   R = r1 + b
   @printf("a = %g;  b = %g;  r1 = %.15g;  r2 = %.15g;  x2 = %.15g;  y2 = %.15g;  r3 = %.15g\n", a, b, r1, r2, x2, y2, r3)
   plot([a, 0, -a, 0, a], [R - b, R, R - b, R - 2b, R - b], color=:green, lw=0.5)
   circle(0, 0, R)
   circle2(x2, y2, r2, :blue)
   circle(0, r1 - R, r1, :magenta)
   circle(0, R - b, r3, :orange)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:gray80, lw=0.5)
       vline!([0], color=:gray80, lw=0.5)
       point(0, r1 - R, "天円:r1,(0,r1-R)", :magenta, :center, delta=-delta/2)
       point(x2, y2, "地円:r2\n(x2,y2)", :blue, :center, delta=-delta/2)
       point(0, R - b, "小円:r3,(0,R-b)", :orange, :center, delta=-delta/2)
       point(0, R, " R", :red, :left, :bottom, delta=delta/2)
       point(a, R - b, " (a,R-b)", :green, :left, :vcenter)
   end
end;

draw(8/2, 6/2, true)

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

算額(その1236)

2024年08月22日 | Julia

算額(その1236)

(25) 兵庫県太子堂町鵤 鵤太子堂 明治26年(1893)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円3個,正三角形,斜線2本

正三角形の中に 2 本の斜線を引き,全円,上円,下円を容れる。上円の直径が 4 寸のとき,下円の直径はいかほどか。

求めるものが違うだけで,算額(その968)と同じである(連立方程式は同じ)。
https://blog.goo.ne.jp/r-de-r/e/82cacbc7db96fa08db36ff4511baa626

正三角形の一辺の長さを 2a
斜線と正三角形の斜辺との交点座標を (b, y); y = √3(a - b)
全円の半径と中心座標を r1, (0, r1)
下円の半径と中心座標を r2, (0, r2)
上円の半径と中心座標を r3, (0,  2r1 + r3)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms a::positive, b::positive, r1::positive, r2::positive, r3::positive
eq1 = dist2(-a, 0, b, √Sym(3)*(a - b), 0, r2, r2)
eq2 = dist2(-a, 0, b, √Sym(3)*(a - b), 0, 2r1 + r3, r3)
eq3 = (√Sym(3)*a - r1) - 2r1
eq4 = (√Sym(3)*a - 2r1 - r3) - 2r3
res = solve((eq1, eq2, eq3, eq4), (a, b, r1, r2))[1]

   (3*sqrt(3)*r3, 5*sqrt(3)*r3/7, 3*r3, 9*r3/4)

下円の半径 r2 は,上円の半径 r3 の 9/4 倍である。
上円の直径が 4 寸のとき,下円の直径は 9 寸である。

その他のパラメータは以下のとおりである。

  r3 = 2;  a = 10.3923048454133;  b = 2.47435829652697;  r1 = 6;  r2 = 4.5

function draw(r3, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (a, b, r1, r2) = (3√3r3, 5√3r3/7, 3r3, 9r3/4)
   @printf("r3 = %g;  a = %.15g;  b = %.15g;  r1 = %.15g;  r2 = %.15g\n", r3, a, b, r1, r2)
   plot([a, 0, -a, 0], [0, √3a, 0, 0], color=:green, lw=0.5)
   circle(0, r1, r1)
   circle(0, r2, r2, :blue)
   circle(0, 2r1 + r3, r3, :magenta)
   segment(-a, 0, b, √3(a - b), :orange)
   segment(a, 0, -b, √3(a - b), :orange)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:gray80, lw=0.5)
       vline!([0], color=:gray80, lw=0.5)
       point(0, √3a, " √3a", :green, :left, :vcenter)
       point(a, 0, " a", :blue, :left, :vcenter)
       point(b, √3(a - b), " (b,√3(a-b))", :orange, :left, :vcenter)
       point(0, r1, "全円:r1,(0,r1)", :red, :center, delta=-delta/2)
       point(0, r2, "下円:r2,(0,r2)", :blue, :center, delta=-delta/2)
       point(0, 2r1 + r3, "上円:r3\n(0,2r1+r3)", :magenta, :center, :bottom, delta=delta/2)
   end
end;

draw(4/2, true)

 

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

算額(その1235)

2024年08月22日 | Julia

算額(その1235)

(25) 兵庫県太子堂町鵤 鵤太子堂 明治26年(1893)
近畿数学史学会:近畿の算額「数学の絵馬を訪ねて」,平成4年5月16日 初版第一刷,大阪教育図書株式会社,大阪市.
キーワード:円1個,正方形2個,扇

中心角 120° の扇面に円 1 個,正方形 2 個を容れる。扇型の半径が与えられたとき,正方形の一辺の長さを求めよ。

扇型の半径(扇長)と中心座標を R, (0, 0)
円の半径と中心座標を r, (0, R - r)
2 つの正方形が接する座標を (0, a)
とおき,以下の連立方程式を解く。



補助線をいくつか引くと,a が正方形の一辺の長さに等しいことがわかる。
⊿AOBは∠AOB=30°の直角三角形。AB=OA*sin(30°), OB=OA*cos(30°)
⊿CODは∠COD=15°の直角三角形。OD=R*cos(15°)

include("julia-source.txt");

using SymPy
@syms R::positive, a::positive, r::positive
eq1 = (R*cosd(Sym(15)) - a*cosd(Sym(30))) - 2a*sind(Sym(30))
eq2 = dist2(0, a, R*sind(Sym(15)), R*cosd(Sym(15)), 0, R - r, r);

res = solve([eq1, eq2], (a, r))[1]

   (R*(-sqrt(2) + sqrt(6))/2, R*(-438210300*sqrt(-158146253946563847*sqrt(2) - 91305782287379553*sqrt(6) + 158146253946563847*sqrt(3) + 273917346862138659) - 2 - sqrt(2) + sqrt(6) + 759002504*sqrt(-52715417982187949*sqrt(2) - 30435260762459851*sqrt(6) + 91305782287379553 + 52715417982187949*sqrt(3)))/6)

res[1] |> sympy.sqrtdenest |> simplify |> println
res[1](R => 10).evalf() |> println

   R*(-sqrt(2) + sqrt(6))/2
   5.17638090205041

正方形の一辺の長さは扇長の (√6 - √2)/2 倍である。
扇長が 10 寸のとき,正方形の一辺の長さは 5.17638090205041 寸である。

「術」は sqrt(扇長^2/(√3 + 2)) としているが,簡約化すると上で導いた式と同じになる。

扇長 = 10
sqrt(扇長^2/(√3 + 2))

   5.176380902050416

res[2] |> sympy.sqrtdenest |> simplify |> println
2res[2](R => 10).evalf() |> println

   R*(-sqrt(6) + sqrt(2) + 2)/6
   3.21574606529972

円の半径は長精度の整数を含む長い式であるが,簡約化でき,扇長の (√2 - √6 + 2)/6 倍である。
扇長が 10 寸のとき,円の直径は 3.21574606529972 寸である。

function draw(R, more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   a = R*(-sqrt(2) + sqrt(6))/2
   r = R*(-sqrt(6) + sqrt(2) + 2)/6
   s = 2a*sind(30)
   @printf("R = %g;  a = %.15g;  r = %.15g;  s = %.15g\n", R, a, r, s)
   plot()
   circle(0, 0, R, beginangle=30, endangle=150)
   circle(0, R - r, r, :blue)
   r2 = cosd(30)a
   circle(0, 0, r2, :red, beginangle=30, endangle=150)
   plot!([sind(15)R, cosd(45)R, cosd(30)a, 0, sind(15)R], [cosd(15)R, sind(45)R, sind(30)a, a, cosd(15)R], color=:green, lw=0.5)
   plot!(-[sind(15)R, cosd(45)R, cosd(30)a, 0, sind(15)R], [cosd(15)R, sind(45)R, sind(30)a, a, cosd(15)R], color=:green, lw=0.5)
   plot!([cosd(150)R, 0, cosd(30)R], [sind(150)R, 0, sind(30)R], color=:red, lw=0.5)
   segment(0, 0, sind(15)R, cosd(15)R, :gray70)
   segment(0, 0, sind(30)R, cosd(30)R, :gray70)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:gray80, lw=0.5)
       vline!([0], color=:gray80, lw=0.5)
       point(0, R, " R", :red, :left, :bottom, delta=delta/2)
       point(0, R - r, " R-r", :blue, :left, :vcenter)
       point(0, a, " a", :green, :left, :bottom, delta=delta/2)
       point(0, r2, " r2", :red, :left, delta=-delta/2)
   end
end;

draw(10, true)

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

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

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