Tetrahedron

正四面體 (Tetrahedron) 共有4個頂點與4個面,若各邊長為ll,則其頂點座標分別為:

(l,0,22l),(l,0,22l),(0,l,22l),(0,l,22l)\displaystyle (l, 0, -\frac{\sqrt{2}}{2}l), \displaystyle (-l, 0, -\frac{\sqrt{2}}{2}l), \displaystyle (0, l, \frac{\sqrt{2}}{2}l), \displaystyle (0, -l, \frac{\sqrt{2}}{2}l)

可簡化為以下之組合:

(±l,0,22l),(0,±l,22l)\displaystyle (\pm l, 0, -\frac{\sqrt{2}}{2}l), \displaystyle (0, \pm l, \frac{\sqrt{2}}{2}l)

請參考以下範例。

程式說明

範例示範以TriangleMesh類別依序設定頂點座標、貼圖座標與三角形所組成的面,藉此組成正四面體 (Tetrahedron)。

步驟一:設定頂點座標。

首先設定正四面體的頂點座標:

float p0 = length*1.0f;
float p1 = 0.0f;
float p2 = (float) (length*Math.sqrt(2.0)/2.0f);

// 建立TriangleMesh
TriangleMesh trianglemesh = new TriangleMesh();

// 設定頂點座標
trianglemesh.getPoints().addAll(
   p0,  p1, -p2, 
  -p0,  p1, -p2, 
   p1,  p0,  p2, 
   p1, -p0,  p2
);
...

步驟二:設定貼圖座標。

接著以getTexCoords().addAll()方法設定貼圖座標:

// 設定貼圖座標
trianglemesh.getTexCoords().addAll(
  0.50f, 1.00f, 
  0.75f, (float) (1.0-Math.sqrt(3.0)/4.0f),  
  0.25f, (float) (1.0-Math.sqrt(3.0)/4.0f),  
  1.00f, 1.00f,  
  0.50f, (float) (1.0-Math.sqrt(3.0)/2.0f),   
  0.00f, 1.00f  
);
...

步驟三:以頂點組成三角形的面。

接著以getFaces().addAll()方法依頂點與貼圖的序號組成正四面體的各個面:

// 設定各三角形的面
trianglemesh.getFaces().addAll(
  0, 0, 1, 1, 2, 2, 
  1, 1, 0, 0, 3, 3, 
  2, 2, 1, 1, 3, 4,  
  0, 0, 2, 2, 3, 5   
);
...

步驟四:設定各面的平滑參數。

平滑參數主要運用於使相鄰兩面邊緣平滑化,避免不規則鋸齒狀的現象。以getFaceSmoothingGroups().addAll()方法設定各面的平滑參數:

// 設定各面的平滑參數
trianglemesh.getFaceSmoothingGroups().addAll(0, 2, 4, 8);
...

最後以MeshView類別建立正四面體:

// 建立MeshView
MeshView meshview;

meshview = new MeshView(createMesh(150));
...

執行結果

以下是以線框的方式繪製正四面體:

以下是以貼圖的方式繪製正四面體:

results matching ""

    No results matching ""