<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Dodecaplex</title> <style> html, body { background: #fff; color: #555; width: 960px; margin: 0 auto; font-family: sans-serif; } canvas { border: none; margin: 0 280px; } #hypercube-options { margin: 10px 0 0 85px; } label { margin: 0 20px; font-size: 15px; cursor: pointer; } </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script> <script type="text/javascript" src="hypersolid.js"></script> </head> <body> <canvas id="octaplex-canvas">Unfortunately, your browser does not support coolness.</canvas> <form id="hypercube-options"> <label><input type="checkbox" name="rotate_xy" />Rotate xy</label> <label><input type="checkbox" name="rotate_yz" />Rotate yz</label> <label><input type="checkbox" name="rotate_xz" />Rotate xz</label> <label><input type="checkbox" name="rotate_xw" />Rotate xw</label> <label><input type="checkbox" name="rotate_yw" />Rotate yw</label> <label><input type="checkbox" name="rotate_zw" />Rotate zw</label> </form> <script type="text/javascript"> d3.text("120cell.ascii", function(err, text) { var data = Hypersolid.parseVEF(text); function NewShape() {}; Hypersolid.NewShape = function() { return new NewShape(); }; NewShape.prototype = Hypersolid.Shape(data[0],data[1],data[2]); var octaplex = Hypersolid.NewShape(); var octaplexView = Hypersolid.Viewport(octaplex, document.getElementById('octaplex-canvas'), { width: 440, height: 440, scale: 2, lineWidth: 2.5, lineJoin: 'round' }); octaplexView.draw(); // animation options = document.getElementById('hypercube-options'); function render() { if (options) { checkboxes = options.getElementsByTagName('input'); } if (options.rotate_xz.checked) { rotate("xz", 0.008); } if (options.rotate_yz.checked) { rotate("yz", 0.008); } if (options.rotate_xw.checked) { rotate("xw", 0.008); } if (options.rotate_yw.checked) { rotate("yw", 0.008); } if (options.rotate_xy.checked) { rotate("xy", 0.008); } if (options.rotate_zw.checked) { rotate("zw", 0.008); } }; function rotate(plane, x) { octaplex.rotate(plane, x); octaplexView.draw(); }; window.requestAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function( callback ){ window.setTimeout(callback, 1000 / 60); }; (function animloop(){ requestAnimFrame(animloop); render(); })(); }); </script>