前回のブログ「四面体の体積」に名称だけ出てきたHeronの式というのがある.
三角形の3辺の長さをそれぞれa, b, cとし, (a+b+c)/2をSとすると, その三角形の
面積は√S(S-a)(S-b)(S-c)というのである.
たとえば, 辺の長さが3,4,5のPythagoras三角形ではS=6だから, 平方根号の中は
6×3×2×1=36で, 面積は6だ. 右の図, 1辺が2の正三角形では,
S=3で, 根号内は3×1×1×1=3で, 面積は√3である.
Heronの式を覚えた時, これが正しいという証明を見たかどうかは分らない.
勿論, Sの次元は長さ, S-a,S-b,S-cも長さなので, 根号内の次元は長さの4乗; 開平すると
2乗になり, つまり面積だ. そういえば, 前回のブログにあった, 四面体の体積を6本の
辺の長さから求める式も体積の次元になっている. あたりまえだ.
でも定量的に合っているかを調べるのが今回の頭の体操である. 方針としては, 根号の
あるのがウンシャンだから, 面積の二乗の値を考えることにする. 例題の三角形は
こういう頂点名と辺名を持つ. 計算の途中で時々数値的にチェックするのにもこれを
使う. この三角形は∠Aが直角なので, 面積は√8×√18/2=6だ.
式を使わざるを得ないから, Texの出力のpdfにも助けてもらおう.
式(0)はHeronの式で, 2乗すると(1). Sを定義で戻し, 展開したのが式(2)である. この程度
の計算はWolframAlphaにやって貰う.
三角形ABCの各頂点の対辺をa,b,cとすると, その各々の2乗もpdfにある通り. これを
式(2)の分子に入れて展開するわけだが, これは中々面倒である. WolframAlphaも
時間がかかるとか文句をいうし, 我が家のRapsberry PiのMathematicaは今は
ネットに繋っていないので, 使い勝手が悪い. 結局は多項式の乗算のプログラムを
Schemeでちょこっと作り, それで展開した. 時々例題の値を入れて験算する.
そして展開した結果は項数21のpdfにある式である. これも目がくらくらするから,
xixjykylについて, ijと
klの対の項の係数を表にしてみた. さらに例題の座標で験算すると576. 16で
割ると36だ. しめしめ.
さてこの式は本当に三角形の面積であろうか. 頂点の座標(x0y0),
(x1y1),(x2y2)の三角形の
面積(頂点の回り方によってはその負数)の式は, 幸いにも私は高校生の頃から知っている. 次のpdfにある式だ.
行列式を計算式にしてその分子の2乗を展開すると, またもや項数21の多項式が得られた.
今回もその係数の表を作るとブラボー! 先の表の1/4の値である. という訳けで
Heronの式は面積になるのであった.
だが待てよ. この行列式はなぜ正しいのか. こちらも気になったので, 計算してみた.
図の三角形の, 座標軸に平行な線での外接長方形を作る. それから長方形の辺と
三角形の辺で作る3個の三角形の面積を引く. そういう式を作ってみる.
WoflramAlpha様に
Expand[(x2-x1)(y0-y2)-(x0-x1)(y0-y1)/2-(x2-x1)(y1-y2)/2-(x2-x0)(y0-y2)/2]
と伺いを立てたら
(x0y1)/2-(x0y2)/2-(x1y0)/2+(x1y2)/2+(x2 y0)/2-(x2y1)/2
のお告げが出た. 整理すると
(x0y1+x1y2+x2y0-x0y2-x1y0-x2y1)/2
となり, 行列式の値と一致している. もう一度ブラボー!
ちゃんとした証明でもないが, 私にとっては十分納得出来る頭の体操であった.
2024年8月1日木曜日
四面体の体積
筑波大の三谷さんのツィッターに四面体の体積を計算する話があった.
角封筒の上の辺の中央と下の辺の両端を結ぶ折目をつけ, それを山折りにすると, 合同な 二等辺三角形4枚による四面体が出来る. 元の封筒の横と縦が1と√2の時の 体積を計算せよという問題である. ちょっとやってみたところ, 存外簡単であった.
下の図で, 赤い線は元の封筒を展開したもの. 下の辺と上の辺は繋っている. この斜めの 線を谷折りにすると, ABCを底面, ACD'を手前の面, ABDを向うの面, 辺DEとD'E'は 繋っていて斜面だが上の面になる.
錐体の体積を計算するには, 底面積と高さが必要だが, 底面積は簡単だ. 辺BCが1, 辺OAは辺ABが√2だから, √7/2である.
高さについては, 三角形ABDは, 辺ABを折目として頂点Dが起き上がるから, Dに対応する 平面上の点はABと直交する破線で示す線に沿って下がり, AO上のGまで来ると下から上って来たD’と 出会って頂点になる. GAの距離はADの距離にtan αを掛けたものだが, tan αはOB/OAだしADは1だから, GA=1/√7である. よって 高さは√6/√7.
求める体積は (√7/2)*(√6)/((√7)*2*3)=1/2√6
三谷さんのツィッターにはヒントと称して, 四面体の6辺の長さからその体積を 求める式があった. 平面三角形のHeronの公式の三次元版である. そこにある式の 添字の付け方を, 私流に修正したのが次の図である.
このように添字を付けると, 四面体の体積Vの2乗は の一番上の式で得られる. しかしこれも目がくらくらするので, 始めの3項と終りの4項を それぞれ6変数のtfと3変数のtgに分け, 2行目以下のように定義する.
最初のV2を計算する式を書いたLatexは次の様だ. 計算式と同様に分解してある.
ところで, 最初の封筒の四面体の体積は, 形状が特殊であったせいか, 簡単であった. 底面の3点の座標と, その各点から頂点までの距離が与えられている時にも体積は 得られるだろうか. 以下はその計算である. 式が沢山あるので, Latexでpdfに したもので示す.
底辺の3点, A, B, Cの座標をそれぞれ(x0,y0,0),
(x1,y1,0),(x2,y2,0);
頂点Dの座標を(x,y,z)とする. A,B,Cから頂点までの距離をそれぞれ
l0,l1,l2とする.
今回もpythonで計算すると
角封筒の上の辺の中央と下の辺の両端を結ぶ折目をつけ, それを山折りにすると, 合同な 二等辺三角形4枚による四面体が出来る. 元の封筒の横と縦が1と√2の時の 体積を計算せよという問題である. ちょっとやってみたところ, 存外簡単であった.
下の図で, 赤い線は元の封筒を展開したもの. 下の辺と上の辺は繋っている. この斜めの 線を谷折りにすると, ABCを底面, ACD'を手前の面, ABDを向うの面, 辺DEとD'E'は 繋っていて斜面だが上の面になる.
錐体の体積を計算するには, 底面積と高さが必要だが, 底面積は簡単だ. 辺BCが1, 辺OAは辺ABが√2だから, √7/2である.
高さについては, 三角形ABDは, 辺ABを折目として頂点Dが起き上がるから, Dに対応する 平面上の点はABと直交する破線で示す線に沿って下がり, AO上のGまで来ると下から上って来たD’と 出会って頂点になる. GAの距離はADの距離にtan αを掛けたものだが, tan αはOB/OAだしADは1だから, GA=1/√7である. よって 高さは√6/√7.
求める体積は (√7/2)*(√6)/((√7)*2*3)=1/2√6
三谷さんのツィッターにはヒントと称して, 四面体の6辺の長さからその体積を 求める式があった. 平面三角形のHeronの公式の三次元版である. そこにある式の 添字の付け方を, 私流に修正したのが次の図である.
このように添字を付けると, 四面体の体積Vの2乗は の一番上の式で得られる. しかしこれも目がくらくらするので, 始めの3項と終りの4項を それぞれ6変数のtfと3変数のtgに分け, 2行目以下のように定義する.
\newcommand{\sq}[1]{l_#1^2}
\newcommand{\tf}[6]{\sq#1\sq#2(\sq#3+
\sq#4+\sq#5+\sq#6-\sq#1-\sq#2)}
\newcommand{\tg}[3]{-\sq#1\sq#2\sq#3}
$V^2=\frac{1}{144}[\tf012345+\tf234501\\
+\tf450123\tg025\tg034\tg124\tg135]$
これを使ってpythonで計算したのが次だ.
import math
def sq(x):
return x*x
def tf(a,b,c,d,e,f):
return sq(a)*sq(b)
*(sq(c)+sq(d)+sq(e)+sq(f)-sq(a)-sq(b))
def tg(a,b,c):
return -sq(a)*sq(b)*sq(c)
def v2(l0,l1,l2,l3,l4,l5):
return (tf(l0,l1,l2,l3,l4,l5)+tf(l2,l3,l4,l5,l0,l1)
+tf(l4,l5,l0,l1,l2,l3)
+tg(l0,l2,l5)+tg(l0,l3,l4)+tg(l1,l2,l4)
+tg(l1,l3,l5))/144
l0=1;l1=1;l2=math.sqrt(2);l3=math.sqrt(2)
l4=math.sqrt(2);l5=math.sqrt(2)
print(math.sqrt(v2(l0,l1,l2,l3,l4,l5)))
=> 0.20412414523193143
この値は確かに1/2√6 である. ところで, 最初の封筒の四面体の体積は, 形状が特殊であったせいか, 簡単であった. 底面の3点の座標と, その各点から頂点までの距離が与えられている時にも体積は 得られるだろうか. 以下はその計算である. 式が沢山あるので, Latexでpdfに したもので示す.
x0=0;y0=-1/2;x1=math.sqrt(7)/2;y1=0;x2=0;y2=1/2 l0=math.sqrt(2);l1=1;l2=math.sqrt(2) a0=2*(x0-x1); b0=2*(y0-y1) c0=sq(l1)-sq(l0)+sq(x0)-sq(x1)+sq(y0)-sq(y1) a1=2*(x1-x2); b1=2*(y1-y2) c1=sq(l2)-sq(l1)+sq(x1)-sq(x2)+sq(y1)-sq(y2) x=(c0*b1-c1*b0)/(a0*b1-a1*b0) y=(a0*c1-a1*c0)/(a0*b1-a1*b0) z=math.sqrt(sq(l0)-sq(x0-x)-sq(y0-y)) print(x,y,z) #=> 0.9449111825230684 0.0 0.9258200997725514期待通りの値が得られた. でもこんな実数の値より, 1/2√6 の方が嬉しい.
登録:
投稿 (Atom)










