<!DOCTYPE html> <html lang="en"> <head> <title>Octahedron challenge</title> <meta charset="UTF-8" /> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/jsxgraph/distrib/jsxgraph.css" /> <script type="text/javascript" charset="UTF-8" src="https://cdn.jsdelivr.net/npm/jsxgraph/distrib/jsxgraphcore.js"></script> </head> <body> <h1>Octahedron challenge</h1> <p>Can you create something like this using <a href="https://jsxgraph.org/docs/symbols/Point3D.html#constructor"><code>Point3D</code></a> and <a href="https://jsxgraph.org/docs/symbols/Polygon3D.html#constructor"><code>Polygon3D</code></a> elements? Don’t worry about including the colors; they’re just to emphasize how the polygons fit together.</p> <p>The <code>create</code> call for <code>Polygon3D</code> isn’t documented, but you can look at the polygon sampler for examples.</p> <div id="octahedron-from-triangles" class="jxgbox" style="width:600px; height:600px"></div> <!-- a solution to the octahedron challenge --> <script type="text/javascript"> // to prevent variable name conflicts, we define variables locally using `let` // and put the code for each board in its own block { // create a JSXGraph board and draw a 3D view on it let board = JXG.JSXGraph.initBoard( 'octahedron-from-triangles', { boundingbox: [-8, 8, 8,-8], axis: false, showCopyright: false, showNavigation: false } ); let view = board.create( 'view3d', [[-4.5, -4.5], [9, 9], [[0, 4], [0, 4], [0, 4]]], { xPlaneRear: {fillOpacity: 0.2, gradient: null}, yPlaneRear: {fillOpacity: 0.2, gradient: null}, zPlaneRear: {fillOpacity: 0.2, gradient: null}, depthOrderPoints: true } ); // create the vertices of the octahedron let vertices = []; coords = [ [1, 2, 2], [3, 2, 2], [2, 1, 2], [2, 3, 2], [2, 2, 1], [2, 2, 3] ]; colors = [ '#f08', '#4f0', '#f60', '#0af', '#40f', '#fb0' ]; for (i in coords) { vertices.push(view.create( 'point3d', coords[i], { withLabel: false, size: 5, strokeColor: 'none', fillColor: 'white', gradientSecondColor: colors[i], highlightStrokeWidth: 1, highlightStrokeColor: '#777' } )); } // create the faces of the octahedron view.create( 'polygon3d', [vertices[0], vertices[2], vertices[5]], { fillColor: '#f85', fillOpacity: 0.2, borders: { strokeWidth: 2, strokeColor: '#f85', highlightStrokeColor: '#777' } } ); view.create( 'polygon3d', [vertices[1], vertices[3], vertices[5]], { fillColor: '#af0', fillOpacity: 0.2, borders: { strokeWidth: 2, strokeColor: '#af0', highlightStrokeColor: '#777' } } ); view.create( 'polygon3d', [vertices[0], vertices[3], vertices[4]], { fillColor: '#a0f', fillOpacity: 0.2, borders: { strokeWidth: 2, strokeColor: '#a0f', highlightStrokeColor: '#777' } } ); view.create( 'polygon3d', [vertices[1], vertices[2], vertices[4]], { fillColor: '#a87', fillOpacity: 0.2, borders: { strokeWidth: 2, strokeColor: '#a87', highlightStrokeColor: '#777' } } ); } </script> </body> </html>