ピックの定理 3次元版 四面体の体積と格子点

2 min読了の目安(約2300字IDEAアイデア記事

四面体の体積と格子点について

\text{O}(0,\,0,\,0)\text{A}(2,\,2,\,3)\text{B}(0,\,1,\,1)\text{C}(-3,\,5,\,8)を頂点とする四面体OABCの体積Vとする。

4つの面の方程式を求めると,
  • \triangle{\text{OAB}} : f(x,y,z)=x+2y-2z=0
  • \triangle{\text{OBC}} : g(x,y,z)=x-y+z=0
  • \triangle{\text{OCA}} : h(x,y,z)=-x+25y-16z=0
  • \triangle{\text{ABC}} : j(z,y,z)=-x-20y+11z+9=0
In [1]:
f(x,y,z)=x+2y-2z
g(x,y,z)=x-y+z
h(x,y,z)=-x+25y-16z
j(x,y,z)=-x-20y+11z+9

Out[1]:
j (generic function with 1 method)
四面体の重心は四面体の内部なので,この座標を調べて領域を考える。
\left(\frac{0+2+0-3}4,\,\frac{0+2+1+5}4,\,\frac{0+3+1+8}4\right)=\left(-\frac14,\,2,\,3\right)

この点が,正領域なのか負領域なのか調べ,四面体の内部を表す連立不等式を作る。

  • \triangle{\text{OAB}} : f(x,y,z)=x+2y-2z<0
  • \triangle{\text{OBC}} : g(x,y,z)=x-y+z>0
  • \triangle{\text{OCA}} : h(x,y,z)=-x+25y-16>0
  • \triangle{\text{ABC}} : j(z,y,z)=-x-20y+11z+9>0
In [2]:
O=[0,0,0];A=[2,2,3];B=[0,1,1];C=[-3,5,8];(O + A + B + C) /4

Out[2]:
3-element Array{Float64,1}:
 -0.25
  2.0
  3.0

In [3]:
f(-1/4,2,3)

Out[3]:
-2.25

In [4]:
g(-1/4,2,3)

Out[4]:
0.75

In [5]:
h(-1/4,2,3)

Out[5]:
2.25

In [6]:
j(-1/4,2,3)

Out[6]:
2.25
格子点と体積の関係は以下の通りである。
  • aは境界上の格子点の数
  • bは境界上の\frac12格子点の数
  • cは内部の格子点の数
  • dは内部の\frac12格子点の数
  • Vは体積V=-\frac16a+\frac1{12}b-\frac13c+\frac16d
In [7]:
function koushi()
b=0;d=0;
    for i=0:16
        for k=-6:4
            for l=0:10
                if f(k/2,l/2,i/2)<0 && g(k/2,l/2,i/2)>0 && h(k/2,l/2,i/2)>0 && j(k/2,l/2,i/2)>0
                    d += 1
                elseif f(k/2,l/2,i/2)<=0 && g(k/2,l/2,i/2)>=0 && h(k/2,l/2,i/2)>=0 && j(k/2,l/2,i/2)>=0
                    b +=1
                end
            end
        end
    end
a=0;c=0;
    for i=0:8
        for k=-3:2
            for l=0:5
                if f(k,l,i)<0 && g(k,l,i)>0 && h(k,l,i)>0 && j(k,l,i)>0
                    c += 1
                elseif f(k,l,i)<=0 && g(k,l,i)>=0 && h(k,l,i)>=0 && j(k,l,i)>=0
                    a +=1
                end
            end
        end
    end
    println(a)
    println(b)
    println(c)
    println(d)
    v=-1/6 *a+1/12 *b-1/3 *c+1/6 *d
end

koushi()


5
14
2
11
Out[7]:
1.5
結果は
  • 境界上の格子点の数a=5
  • 境界上の\frac12格子点の数b=14
  • 内部の格子点の数c=2
  • 内部の\frac12格子点の数d=11
  • 体積V=-\frac16\times5+\frac1{12}\times 14-\frac13\times 2+\frac16\times 11=\frac32