算額(その1371)
六十二 群馬県高崎市石原町 清水寺 天保10年(1837)
群馬県和算研究会:群馬の算額,上武印刷株式会社,高崎市,1987年3月31日.
キーワード:三角形,二等辺三角形3個
#Julia, #SymPy, #算額, #和算
三角形の中に斜線を 2 本引き,3 個の二等辺三角形を作る。それぞれの二等辺三角形の斜辺(×をつけた)の長さは小斜に等しい。中斜,小斜が与えられたとき,大斜を求める術を述べよ。
3 個の二等辺三角形の頂点の座標を,(x1, y1), (x2, y2), (x3, 0), (x4, 0)
中斜,小斜の長さを 「中斜」,「小斜」
とおき,以下の連立方程式を解く。
大斜 = x4 である。
include("julia-source.txt");
# julia-source.txt ソース https://blog.goo.ne.jp/r-de-r/e/ad3a427b84bb416c4f5b73089ae813cf
using SymPy
@syms x1::positive, y1::positive,
x2::positive, y2::positive,
x3::positive, x4::positive,
小斜::positive, 中斜::positive;
eq1 = x2^2 + y2^2 - 小斜^2
eq2 = (x3 - x2)^2+y2^2 - 小斜^2
eq3 = (x1 - x3)^2 + y1^2 - 小斜^2
eq3 = (x4 - x1)^2 + y1^2 - 小斜^2
eq4 = 小斜 + sqrt((x1 - x2)^2 + (y1 - y2)^2) - 中斜
eq5 = (x3 + x4)/2 - x1
eq6 = y2/x2 - y1/x1
res = solve([eq1, eq2, eq3, eq4, eq5, eq6], (x1, y1, x2, y2, x3, x4))[2] # 2 of 2
(中斜*(中斜^3 - 3*中斜^2*小斜 + 3*中斜*小斜^2 - 小斜^3)*sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/(2*sqrt(小斜)*(中斜^4 - 4*中斜^3*小斜 + 6*中斜^2*小斜^2 - 4*中斜*小斜^3 + 小斜^4)), 中斜*sqrt(-中斜 + 3*小斜)/(2*sqrt(小斜)), sqrt(小斜)*(中斜^3 - 3*中斜^2*小斜 + 3*中斜*小斜^2 - 小斜^3)*sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/(2*(中斜^4 - 4*中斜^3*小斜 + 6*中斜^2*小斜^2 - 4*中斜*小斜^3 + 小斜^4)), sqrt(小斜)*sqrt(-中斜 + 3*小斜)/2, sqrt(小斜)*(中斜^3 - 3*中斜^2*小斜 + 3*中斜*小斜^2 - 小斜^3)*sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/(中斜^4 - 4*中斜^3*小斜 + 6*中斜^2*小斜^2 - 4*中斜*小斜^3 + 小斜^4), sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/sqrt(小斜))
res[6] |> factor |> println
sqrt(中斜 + 小斜)*Abs(中斜 - 小斜)/sqrt(小斜)
大斜(x4)は,「中斜と小斜の和を小斜で割ったもの平方根に中斜と小斜の差を掛ける」と得られる。
たとえば,中斜 = 1.5,小斜 = 0.6 のとき,大斜は 1.5459002853702086 である。
中斜 = 1.5
小斜 = 0.65
sqrt((中斜 + 小斜)/小斜)*(中斜 - 小斜)
1.5459002853702086
function draw(中斜, 小斜, more)
pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
(x1, y1, x2, y2, x3, x4) = (中斜*(中斜^3 - 3*中斜^2*小斜 + 3*中斜*小斜^2 - 小斜^3)*sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/(2*sqrt(小斜)*(中斜^4 - 4*中斜^3*小斜 + 6*中斜^2*小斜^2 - 4*中斜*小斜^3 + 小斜^4)), 中斜*sqrt(-中斜 + 3*小斜)/(2*sqrt(小斜)), sqrt(小斜)*(中斜^3 - 3*中斜^2*小斜 + 3*中斜*小斜^2 - 小斜^3)*sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/(2*(中斜^4 - 4*中斜^3*小斜 + 6*中斜^2*小斜^2 - 4*中斜*小斜^3 + 小斜^4)), sqrt(小斜)*sqrt(-中斜 + 3*小斜)/2, sqrt(小斜)*(中斜^3 - 3*中斜^2*小斜 + 3*中斜*小斜^2 - 小斜^3)*sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/(中斜^4 - 4*中斜^3*小斜 + 6*中斜^2*小斜^2 - 4*中斜*小斜^3 + 小斜^4), sqrt(中斜^3 - 中斜^2*小斜 - 中斜*小斜^2 + 小斜^3)/sqrt(小斜))
@printf("中斜が %g,小斜が %g のとき,大斜は %g である。\n", 中斜, 小斜, x4)
@printf("x1 = %g; y1 = %g; x2 = %g; y2 = %g; x3 = %g; x4 = %g\n", x1, y1, x2, y2, x3, x4)
plot([0, x4, x1, 0], [0, 0, y1, 0], color=:magenta, lw=0.5)
segment(x2, y2, x3, 0)
segment(x3, 0, x1, y1)
if more == true
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(x2, y2, "(x2,y2) ", :black, :right, :bottom, delta=delta)
point(x1, y1, "(x1,y1) ", :black, :right, :bottom, delta=delta)
point(0, 0, "0", :black, :center, delta=-3delta)
point(x3, 0, "x3", :black, :center, delta=-3delta)
point(x4, 0, "x4", :black, :center, delta=-3delta)
dimension_line(x1 + 2.5delta, y1, x4 + 2.5delta, 0, "小斜", :green, :left, deltax=2delta)
dimension_line(-delta/2, 2delta, x1 - delta/2, y1 + 2delta, "中斜", :blue, :center, delta=6delta)
dimension_line(0, -2delta, x4, -2delta, "大斜", :red, :center, delta=-4delta)
point(x2/2, y2/2, "×", :black, :center, :vcenter, mark=false)
point((x2+x3)/2, y2/2, "×", :black, :center, :vcenter, mark=false)
point((x1+x3)/2, y1/2, "×", :black, :center, :vcenter, mark=false)
point((x1+x4)/2, y1/2, "×", :black, :center, :vcenter, mark=false)
segment(0, 0, x2, y2, :black)
plot!(xlims=(-5delta, x4 + 5delta), ylims=(-10delta, y1 + 8delta))
end
end;
draw(1.5, 0.65, true)
※コメント投稿者のブログIDはブログ作成者のみに通知されます