Built with blockbuilder.org
Graphic inspired by Tamara Munzner "Visualization Analysis & Design", Page 102
forked from apratt2003's block: 3D Volume
xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
</style>
</head>
<body>
<script>
var svgContainer = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500);
var text = svgContainer.append("text")
.text("Spin the hexagon")
.attr("y", 200)
.attr("x", 120)
.attr("font-size", 36)
.attr("font-family", "monospace");
foo = [75,50,25,5 ]
cube(foo[0], 600, 250);
cube(foo[1], 400, 250);
cube(foo[2], 250, 250);
cube(foo[3], 125, 250);
function cube(size, centerx, centery){
const dia = (Math.sqrt(3)/2)
var cubeSize = size;
var cubeCenter = {
x:centerx,
y:centery
};
var cubePath1 = [
{x:cubeCenter.x, y:cubeCenter.y},
{x:-cubeSize+cubeCenter.x, y:0+cubeCenter.y},//west
{x:-cubeSize/2+cubeCenter.x, y:-cubeSize*dia+cubeCenter.y}, //northwest
{x:cubeSize/2+cubeCenter.x, y:-cubeSize*dia+cubeCenter.y} // northeast
];
var cubePath2 = [
{x:cubeCenter.x, y:cubeCenter.y},
{x:-cubeSize+cubeCenter.x, y:0+cubeCenter.y}, //west
{x:-cubeSize/2+cubeCenter.x, y:cubeSize*dia+cubeCenter.y}, //southwest
{x:cubeSize/2+cubeCenter.x, y:cubeSize*dia+cubeCenter.y}, //southeast
];
var cubePath3 = [
{x:cubeCenter.x, y:cubeCenter.y},
{x:cubeSize/2+cubeCenter.x, y:cubeSize*dia+cubeCenter.y}, //southeast
{x:cubeSize+cubeCenter.x, y:0+cubeCenter.y}, //East
{x:cubeSize/2+cubeCenter.x, y:-cubeSize*dia+cubeCenter.y} // northeast
];
var pathFunction = d3.line()
.x(function(d) {return d.x;})
.y(function(d) {return d.y;})
var drawCubeTop = svgContainer
.append("path")
.attr("d", pathFunction(cubePath1))
.attr("stroke-width", 2)
.attr("fill", "#d3d3d3");
var drawCubeLeft = svgContainer
.append("path")
.attr("d", pathFunction(cubePath2))
.attr("stroke-width", 2)
.attr("fill", "#11111");
var drawCubeRight = svgContainer
.append("path")
.attr("d", pathFunction(cubePath3))
.attr("stroke-width", 2)
.attr("fill", "#f9f2f2");
}
</script>
</body>
https://d3js.org/d3.v4.min.js