😸

三角柱を三角錐で3等分する

に公開

錐の体積の公式に1/3が付く説明の時などによく図が書いてあるが, いまいちわかりにくかったので自分で書いてみた. それだけ.

元の図形は断面が直角2等辺三角形の三角柱. 底面の直角を挟む辺と, 三角柱の高さがいずれも等しい(h).

これを同じ三角錐3つで3等分する. 結果がこれ.

弧の角度記号が付いているところが各三角錐の底面の直角2等辺三角形. 直角マークがついていて青線になっているのが各三角錐の高さに相当する辺. ポイントは直角が3つ集まった頂点はスルーするってことと, 小さい方の側面を半分にすると底面と合同な直角2等辺三角形ができるので, それを3つ目の三角錐の底面にするってところかな.

コード
prologues := 3;
outputtemplate := "%j/%3c.%o";
% outputformat := "svg";
outputformat := "png";

input featpost;

beginfig(0);

% ShiftV, Spread の退避,再定義
save ShiftV,Spread;
pair ShiftV;
ShiftV:=(0,0);
numeric Spread;
Spread:=72;

color p[];
p0:=(0,0,0);p1:=(1,0,0);p2:=(0,1,0);
p3:=(0,0,1);p4:=(1,0,1);p5:=(0,1,1);

draw rp(p0)--rp(p1) dashed evenly;
draw rp(p0)--rp(p2) dashed evenly;
draw rp(p1)--rp(p2);

draw rp(p3)--rp(p4)--rp(p5)--cycle;

draw rp(p0)--rp(p3) dashed evenly;
draw rp(p1)--rp(p4);
draw rp(p2)--rp(p5);

drawarrow rp(p1)--rp(p1+(0.5,0,0));
label.bot(btex $x$ etex,rp(p1+(0.5,0,0)));
drawarrow rp(p2)--rp(p2+(0,0.5,0));
label.bot(btex $y$ etex,rp(p2+(0,0.5,0)));
drawarrow rp(p3)--rp(p3+(0,0,0.5));
label.top(btex $z$ etex,rp(p3+(0,0,0.5)));

label.lft(btex $h$ etex,rp(0.5*(p1+p4)));
label.ulft(btex $h$ etex,rp(0.5*(p3+p4)));
label.urt(btex $h$ etex,rp(0.5*(p3+p5)));

squareangline(p1,p2,p0,0.1);
squareangline(p4,p5,p3,0.1);

% DPI adj. for windows
currentpicture := currentpicture scaled (96/72);
endfig;

beginfig(1);

% ShiftV, Spread の退避,再定義
save ShiftV,Spread;
pair ShiftV;
ShiftV:=(0,0);
numeric Spread;
Spread:=72;

color p[];
p0:=(0,0,0);p1:=(1,0,0);p2:=(0,1,0);
p3:=(0,0,1);p4:=(1,0,1);p5:=(0,1,1);

draw rp(p0)--rp(p1) dashed evenly;
draw rp(p0)--rp(p2) dashed evenly;
draw rp(p1)--rp(p2);

pickup pencircle scaled 1pt;
draw rp(p3)--rp(p4) withcolor blue;
pickup defaultpen;
draw rp(p4)--rp(p5)--rp(p3);

draw rp(p0)--rp(p3) dashed evenly;
pickup pencircle scaled 1pt;
draw rp(p1)--rp(p4) withcolor blue;
draw rp(p2)--rp(p5) withcolor blue;
pickup defaultpen;

draw rp(p4)--rp(p2);
draw rp(p4)--rp(p0) dashed evenly;
draw rp(p2)--rp(p3) dashed evenly;

drawarrow rp(p1)--rp(p1+(0.5,0,0));
label.bot(btex $x$ etex,rp(p1+(0.5,0,0)));
drawarrow rp(p2)--rp(p2+(0,0.5,0));
label.bot(btex $y$ etex,rp(p2+(0,0.5,0)));
drawarrow rp(p3)--rp(p3+(0,0,0.5));
label.top(btex $z$ etex,rp(p3+(0,0,0.5)));

squareangline(p0,p4,p1,0.1);
squareangline(p2,p4,p1,0.1);
angline(p0,p2,p1,0.2,nullpicture,rt);

squareangline(p3,p2,p5,0.1);
squareangline(p4,p2,p5,0.1);
angline(p3,p4,p5,0.2,nullpicture,rt);

squareangline(p0,p4,p3,0.1);
squareangline(p2,p4,p3,0.1);
angline(p0,p2,p3,0.2,nullpicture,rt);

% DPI adj. for windows
currentpicture := currentpicture scaled (96/72);
endfig;

end

3Dライブラリ(FeatPost)を使ってちゃんと書くとちゃんと理解できる(笑).

誰かの参考になれば幸いです♪

Discussion