裏 RjpWiki

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

算額(その1350)

2024年10月13日 | Julia

算額(その1350)

二十九 群馬県高崎市山名町 八幡宮 文化11年(1814)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:直角三角形,正三角形,正方形,円
#Julia, #SymPy, #算額, #和算

直角三角形の中に,正三角形,正方形,円を容れる。直角三角形の面積を,直角三角形の三辺,正三角形の一辺,正方形の一辺,円の直径の 6 個の和で表す術を述べよ。

正三角形の一辺の長さを a
正方形の一辺の長さを c
直角三角形の 3 辺をそのまま「鈎」,「股」,「弦」
股 = 2a + b, b = a - c
円の半径を r
「直角三角形の三辺,正三角形の一辺,正方形の一辺,円の直径の 6 個の和」を K
とおく。

図中の(隠れているものも含む)直角三角形は,辺の比が 1:√3:2 であり,相似(合同)である(証明,説明省略)。よって,弦 = 2鈎,股 = √3鈎である。
また,正三角形の右にある三角形は頂角 120° の二等辺三角形である。
これらの長さの関係について以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms 鈎, 股, 弦, a, b, c, r, K
弦 = 2鈎
股 = √Sym(3)鈎
b = a - c
eq1 = 鈎 + 股 + 弦 + a + c + 2r - K
eq2 = 2a + b - 股
eq3 = (a + 2b)/√Sym(3) + √Sym(3)a - 弦
eq4 = (a - c + 2b) + c - (鈎 - 2c/√Sym(3) + √Sym(3)b) - 2r
eq5 = a - c + 2b - √Sym(3)c;

res = solve([eq1, eq2, eq4, eq5], (鈎, a, c, r));

鈎は長精度整数を含む分数式で表される。

res[鈎] |> println

   294669784542913660789*K/(1846975238059608604496 + 1066351650880288157387*sqrt(3)) + 170127679427900227272*sqrt(3)*K/(1846975238059608604496 + 1066351650880288157387*sqrt(3))

しかし,以下のようにあっけなく簡約化される。

ans_鈎 = res[鈎] |> simplify |> factor
ans_鈎 |> println

   K*(sqrt(3) + 8)/61

直角三角形の面積は 鈎*股/2 = √3*鈎^2 で,簡約化すると K^2*(48 + 67*sqrt(3))/7442 になる。

すなわち,「直角三角形の面積は,直角三角形の三辺,正三角形の一辺,正方形の一辺,円の直径の 6 個の和の平方の,(48 + 67√3)/7442 倍である。」

ans_鈎 * √Sym(3)ans_鈎 / 2 |> simplify |> println

   K^2*(48 + 67*sqrt(3))/7442

ちなみに,a, c, r も K の関数として,それぞれ以下のように表される。

res[a] |> simplify |> factor |> println
res[c] |> simplify |> factor |> println
res[r] |> simplify |> factor |> println

   K*(-5 + 7*sqrt(3))/61
   K*(-18 + 13*sqrt(3))/61
   -K*(-57 + 31*sqrt(3))/122

たとえば,K = 100 のとき,パラメータは以下のようになる。

K = 100;  鈎 = 15.9541816517523;  股 = 27.6334532140181;  弦 = 31.9083633035045;  a = 11.6792715622658;  b = 4.27491008948646;  c = 7.40436147277935;  r = 2.71018439784;

6 和が 100 になることが確かめられる。

鈎 + 股 + 弦 + a + c + 2r

   100.00000000000004

function draw(K, more)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   鈎 = K*(√3 + 8)/61
   a = K*(7√3 - 5)/61
   c = K*(13√3 - 18)/61
   r = K*(57 - 31√3)/122
   弦 = 2鈎
   股 = √3鈎
   b = a - c
   @printf("K = %.15g;  鈎 = %.15g;  股 = %.15g;  弦 = %.15g;  a = %.15g;  b = %.15g;  c = %.15g;  r = %.15g\n ", K, 鈎, 股, 弦, a, b, c, r)
   plot([0, 股, 0, 0], [0, 0, 鈎, 0], color=:black, lw=0.5)
   circle(r, r, r)
   plot!([b, b + a, b + a/2, b], [0, 0, √3a/2, 0], color=:blue, lw=0.5)
   plot!([0, √3c/2, √3c/2 + c/2, c/2, 0], [鈎 - 2c/√3, 鈎 - 2c/√3 - c/2, 鈎 - 2c/√3 - c/2 + √3c/2, 鈎 - 2c/√3 + √3c/2, 鈎 - 2c/√3], color=:green, lw=0.5)
   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(b, 0, "b", :blue, :center, delta=-delta)
       point(b + a, 0, "b+a", :blue, :center, delta=-delta)
       point(b + 2a, 0, "b+2a = 股", :blue, :center, delta=-delta)
       point(0, 鈎, "鈎 ", :black, :right, :vcenter)
       point(0, 鈎 - 2c/√3, "鈎-2c/√3 ", :black, :right, :vcenter)
       point(r, r, "(r,r)", :red, :center, delta=-delta)
       dimension_line(√3c/2 + c/2 + 1.1delta, 鈎 - 2c/√3 - c/2 + √3c/2 + 2delta, c/2 +  1.1delta, 鈎 - 2c/√3 + √3c/2 +  2delta, "c", :green, :center, :bottom, delta=2delta, deltax=2delta)
       dimension_line(b + 2delta, -1.1delta, b + (a - c)/2 + 2delta, √3(a - c)/2 - 1.1delta, "b", :blue, :left, deltax=3delta)
       plot!(xlims=(-28delta, 股 + 15delta), ylims=(-8delta, 鈎 + 5delta))
   end  
end;

draw(100, true)

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

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

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