Great Dodecahedron
大十二面體 (Great Dodecahedron) 共有12個頂點,若各邊長為,則其頂點座標分別為以下之組合:
請參考以下範例。
程式說明
範例示範以TriangleMesh
類別依序設定頂點座標、貼圖座標與三角形所組成的面,藉此組成大十二面體 (Great Dodecahedron)。
步驟一:設定頂點座標。
首先設定大十二面體的頂點座標:
float p0 = length * 0.5f;
float p1 = 0.0f;
float p2 = (float) (length * (Math.sqrt(5.0) + 1.0) / 4.0f);
// 建立TriangleMesh
TriangleMesh trianglemesh = new TriangleMesh();
// 設定頂點座標
trianglemesh.getPoints().addAll(
p0, p1, p2,
p0, p1, -p2,
-p0, p1, p2,
-p0, p1, -p2,
p2, p0, p1,
p2, -p0, p1,
-p2, p0, p1,
-p2, -p0, p1,
p1, p2, p0,
p1, p2, -p0,
p1, -p2, p0,
p1, -p2, -p0
);
...
步驟二:設定貼圖座標。
接著以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, 2, 2, 1, 7, 0,
0, 2, 7, 1, 11, 0,
0, 2, 11, 1, 5, 0,
0, 2, 5, 1, 1, 0,
0, 2, 1, 1, 9, 0,
0, 2, 9, 1, 8, 0,
0, 2, 8, 1, 6, 0,
0, 2, 6, 1, 7, 0,
0, 2, 7, 1, 10, 0,
1, 2, 3, 1, 6, 0,
1, 2, 6, 1, 8, 0,
1, 2, 8, 1, 4, 0,
1, 2, 4, 1, 0, 0,
1, 2, 0, 1, 10, 0,
1, 2, 10, 1, 11, 0,
1, 2, 11, 1, 7, 0,
1, 2, 7, 1, 6, 0,
1, 2, 6, 1, 9, 0,
2, 2, 0, 1, 4, 0,
2, 2, 4, 1, 9, 0,
2, 2, 9, 1, 6, 0,
2, 2, 6, 1, 3, 0,
2, 2, 3, 1, 11, 0,
2, 2, 11, 1, 10, 0,
2, 2, 10, 1, 5, 0,
2, 2, 5, 1, 4, 0,
2, 2, 4, 1, 8, 0,
3, 2, 1, 1, 5, 0,
3, 2, 5, 1, 10, 0,
3, 2, 10, 1, 7, 0,
3, 2, 7, 1, 2, 0,
3, 2, 2, 1, 8, 0,
3, 2, 8, 1, 9, 0,
3, 2, 9, 1, 4, 0,
3, 2, 4, 1, 5, 0,
3, 2, 5, 1, 11, 0
);
...
步驟四:設定各面的平滑參數。
以getFaceSmoothingGroups().addAll()
方法設定各面的平滑參數:
// 設定各面的平滑參數
trianglemesh.getFaceSmoothingGroups().addAll(
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
);
...
最後以MeshView
類別建立大十二面體:
// 建立MeshView
MeshView meshview;
meshview = new MeshView(createMesh(200));
...
執行結果
以下是以線框的方式繪製大十二面體:
以下是以貼圖的方式繪製大十二面體: