高松市栗林町 さぬきうどん 上原屋本店
やや細麺で,掛けうどんにしたこともあるだろうが柔らかくもちもちした麺
かき揚げの大きさに驚く😲
算額(その1401)
二十三 一関市萩荘字八幡 達子袋八幡神社 弘化3年(1846)
山村善夫:現存 岩手の算額,昭和52年1月30日,熊谷印刷,盛岡市.
http://www.wasan.jp/yamamura/yamamura.html
キーワード:三角形,面積
#Julia, #SymPy, #算額, #和算
三角形が 2 つの頂点とそれぞれの対辺上の一点を結ぶ斜線により 4 分割されている。黄色,青,赤の三角形の面積が等しくなる(等積と呼ぶ)ようにする術を述べよ。
3つの頂点の座標を (0, 0), (a, 0), (x2, y2)
斜線の交点座標を (x0, y0)
斜線と斜辺と底辺の交点の座標を (x3, y3), (x4, 0)
黄,青,赤,灰の三角形の面積を S1, S2, S3, S4
とおき,それぞれは最終的に a, x2, y2 のみを含む式であらわす。
x0, y0 を求めるには S1 = S2, S1 = S3 の二元連立方程式を解く。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
@syms x0, y0, a, x2, y2, x3, y3, x4
(x3, y3) = intersection(a, 0, x0, y0, 0, 0, x2, y2)
x3 = a*x2*y0/(a*y2 - x0*y2 + x2*y0)
y3 = a*y0*y2/(a*y2 - x0*y2 + x2*y0)
x4 = (-x0*y2 + x2*y0)/(y0 - y2)
S = a*y2/2
S2 = (a - x4)*y0/2
S1 = a*y3/2 - S2
S3 = (a - x4)*y2/2 - S2
eq1 = S1 - S2
eq2 = S2 - S3
eq1 |> println
eq2 |> println
a^2*y0*y2/(2*(a*y2 - x0*y2 + x2*y0)) - y0*(a - (-x0*y2 + x2*y0)/(y0 - y2))
y0*(a - (-x0*y2 + x2*y0)/(y0 - y2)) - y2*(a - (-x0*y2 + x2*y0)/(y0 - y2))/2
res = solve([eq1, eq2], (x0, y0))[1] # 1 of 2
(-sqrt(5)*a/4 + 3*a/4 + x2/2, y2/2)
3 つの面積が等しくなるようにするには,(原点以外の)2 つの頂点から (-sqrt(5)*a/4 + 3*a/4 + x2/2, y2/2) を通る斜線を引けばよい。
a = 10, x2 = 3, y2 = 5 のときは,(3.4098300562505255, 2.5) である。
このとき,x3, y3, x4 は
a*x2*y0/(a*y2 - x0*y2 + x2*y0) = 1.8541019662496845
a*y0*y2/(a*y2 - x0*y2 + x2*y0) = 3.090169943749474
(-x0*y2 + x2*y0)/(y0 - y2) = 3.819660112501052
である。
等積が全体の面積の何倍かは,
全体の面積 = S = S1 + S2 + S3 + S4, 等積 = S0 = S1 = S2 = S3 とすれば,
等積/全体の面積 = S0/S = (√5 - 1)/4
すなわわち,等積は全体の面積の (√5 - 1)/4 倍であることがわかる。
S = a*y2/2
x4 = (-x0*y2 + x2*y0)/(y0 - y2)
S2 = (a - x4)*y0/2
S2(x0 => res[1], y0 => res[2])/S |> simplify |> println
-1/4 + sqrt(5)/4
等積が実際にはいくつかを知るには,底辺と高さがわかっていれば以下のようにすればよい。
S = a*y2/2
S0 = S * ((√5 -1)/4)
S0(a => 10, y2 => 5) |> println
7.72542485937369
3 辺の長さが分かっているときはヘロンの公式を使い,以下のようにすればよい。
@syms a, b, c
s = (a + b + c)/2
S = sqrt(s*(s - a)*(s - b)*(s -c))
S0 = S * ((√5 -1)/4)
S0(a => 10, b => sqrt(3^2 + 5^2), c => sqrt(7^2 + 5^2)) |> println
7.72542485937369
全てのパラメータは以下のとおりである。
S = 25.0, S1 = 7.725424859373685, S2 = 7.725424859373685, S3 = 7.725424859373685, S4 = 1.8237254218789438
a = 10; b = 5.83095; c = 8.60233; x2 = 3; y2 = 5; x0 = 3.40983; y0 = 2.5; x3 = 1.8541; y3 = 3.09017; x4 = 3.81966
function draw(a, x2, y2, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
b = sqrt(x2^2 + y2^2)
c = sqrt((a - x2)^2 + y2^2)
(x0, y0) = (-sqrt(5)*a/4 + 3*a/4 + x2/2, y2/2)
x3 = a*x2*y0/(a*y2 - x0*y2 + x2*y0)
y3 = a*y0*y2/(a*y2 - x0*y2 + x2*y0)
x4 = (-x0*y2 + x2*y0)/(y0 - y2)
S = a*y2/2
S2 = (a - x4)*y0/2
S1 = a*y3/2 - S2
S3 = (a - x4)*y2/2 - S2
S4 = x4*y2/2 - S1
S123 = (S - S4)/3
println("S = $S, S1 = $S1, S2 = $S2, S3 = $S3, S4 = $S4")
@printf("a = %g; b = %g; c = %g; x2 = %g; y2 = %g; x0 = %g; y0 = %g; x3 = %g; y3 = %g; x4 = %g\n", a, b, c, x2, y2, x0, y0, x3, y3, x4)
#plot([0, a, x2, 0], [0, 0, y2, 0], color=:green, lw=0.5)
plot([0, x4, x0, x3, 0], [0, 0, y0, y3, 0], color=:orange, seriestype=:shape, fillcolor=:orange, alpha=0.2)
plot!([x4, a, x0, x4], [0, 0, y0, 0], color=:blue, seriestype=:shape, fillcolor=:blue, alpha=0.2)
plot!([x0, a, x2, x0], [y0, 0, y2, y0], color=:red, seriestype=:shape, fillcolor=:red, alpha=0.2)
plot!([x3, x0, x2, x3], [y3, y0, y2, y3], color=:black, seriestype=:shape, fillcolor=:black, alpha=0.2)
segment(a, 0, x3, y3)
segment(x4, 0, x2, y2)
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(x3, y3, "(x3,y3) ", :black, :right, :vcenter)
point(x0, y0, " (x0,y0)", :black, :left, :bottom)
point(x4, 0, "x4", :black, :center, delta=-2delta)
point(a, 0, "a", :black, :center, delta=-2delta)
point(x2, y2, " (x2,y2)", :black, :left, :bottom)
point(x4/2, y0/2, "S1", :darkgoldenrod, mark=false)
point(x4 + (a - x4)/5, y0/2, "S2", :blue, mark=false)
point(x4 + (a - x4)/5, 0.6y2, "S3", :red, mark=false)
point(0.65x4, 0.7y2, "S4", :black, mark=false)
ylims!(-8delta, y2 + 2delta)
end
end;
draw(10, 3, 5, true)