How to make a decahedron
Categories:
Crafting a Decahedron: A Guide to 3D Geometric Shapes

Explore the fascinating world of decahedrons, a 10-faced polyhedron. This guide covers their geometric properties, construction methods, and how to visualize them using code.
A decahedron is a polyhedron with ten faces. While the term 'decahedron' broadly refers to any 10-faced solid, it most commonly brings to mind specific convex forms like the pentagonal bipyramid or the octagonal prism. Unlike regular polyhedra, decahedrons can take on a variety of shapes, each with unique properties. Understanding their construction involves principles of geometry, often leveraging programming for precise visualization and manipulation.
Understanding Decahedron Geometry
The most common decahedrons are the pentagonal bipyramid and the octagonal prism. A pentagonal bipyramid is formed by joining two pentagonal pyramids at their bases. It has 10 faces (triangles), 15 edges, and 7 vertices. An octagonal prism, on the other hand, has two octagonal bases and eight rectangular side faces, totaling 10 faces. It has 24 edges and 16 vertices. The choice of which decahedron to 'make' depends on the specific geometric properties you wish to explore or the application you have in mind.
graph TD A[Decahedron] --> B{Common Forms} B --> C[Pentagonal Bipyramid] B --> D[Octagonal Prism] C --> C1["10 Faces (Triangles)"] C --> C2["15 Edges"] C --> C3["7 Vertices"] D --> D1["10 Faces (2 Octagons, 8 Rectangles)"] D --> D2["24 Edges"] D --> D3["16 Vertices"] A --> E[Other Variations] E --> F["e.g., Enneahedron + 1 face"]
Common Decahedron Forms and Their Properties
Constructing a Decahedron with JavaScript and HTML
While physical construction involves materials like paper or plastic, digital construction allows for interactive visualization. We can use JavaScript with a library like Three.js to render 3D shapes. For a decahedron, we'll define its vertices and faces. Let's consider constructing a pentagonal bipyramid, as it's a classic example of a decahedron. The process involves defining the coordinates of its vertices and then connecting these vertices to form triangular faces.
function createPentagonalBipyramid(radius, height) {
const geometry = new THREE.BufferGeometry();
const vertices = [];
const indices = [];
// Top and bottom vertices
vertices.push(0, height / 2, 0); // Top apex (index 0)
vertices.push(0, -height / 2, 0); // Bottom apex (index 1)
// Pentagonal base vertices
for (let i = 0; i < 5; i++) {
const angle = (i / 5) * Math.PI * 2;
vertices.push(radius * Math.cos(angle), 0, radius * Math.sin(angle));
}
// Faces for top pyramid (5 triangles)
for (let i = 0; i < 5; i++) {
indices.push(0, 2 + i, 2 + (i + 1) % 5);
}
// Faces for bottom pyramid (5 triangles)
for (let i = 0; i < 5; i++) {
indices.push(1, 2 + (i + 1) % 5, 2 + i);
}
geometry.setIndex(indices);
geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
geometry.computeVertexNormals();
return new THREE.Mesh(geometry, new THREE.MeshStandardMaterial({ color: 0x0077ff, flatShading: true }));
}
// Example usage (assuming Three.js is loaded)
// const scene = new THREE.Scene();
// const decahedron = createPentagonalBipyramid(5, 10);
// scene.add(decahedron);
JavaScript code to create a pentagonal bipyramid (a decahedron) using Three.js.
Visualizing the Decahedron in HTML
To display our decahedron, we need an HTML canvas and a basic Three.js setup. This involves creating a scene, a camera, a renderer, and adding our generated mesh to the scene. Lighting is also essential for a realistic appearance. The following HTML and JavaScript snippet demonstrates how to set up a minimal Three.js environment to render the decahedron created by the previous function.
HTML Structure
JavaScript (script.js)
// Place the createPentagonalBipyramid function here // ... (from previous code block)
// Three.js setup const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement);
// Add decahedron to scene const decahedron = createPentagonalBipyramid(5, 10); scene.add(decahedron);
// Add lighting const ambientLight = new THREE.AmbientLight(0x404040); scene.add(ambientLight); const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8); directionalLight.position.set(1, 1, 1).normalize(); scene.add(directionalLight);
camera.position.z = 20;
// Animation loop function animate() { requestAnimationFrame(animate); decahedron.rotation.x += 0.005; decahedron.rotation.y += 0.005; renderer.render(scene, camera); } animate();
// Handle window resize window.addEventListener('resize', () => { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); });
1. Set up your project
Create an index.html
file and a script.js
file in the same directory. Ensure you have an internet connection to load the Three.js library from the CDN.
2. Populate HTML and JavaScript
Copy the HTML structure into index.html
and the JavaScript code into script.js
. Make sure the createPentagonalBipyramid
function is included in script.js
.
3. Open in browser
Open index.html
in a web browser. You should see a rotating blue decahedron (pentagonal bipyramid) rendered on the screen.
4. Experiment with parameters
Modify the radius
and height
parameters in the createPentagonalBipyramid
function to observe how the shape changes. You can also adjust the rotation speed or color.