If you’re unfamiliar with the concept and/or ideas of flatland, this post might not make a lot of sense to you. If you don’t want to read up on flatland, here’s a nice image which does a (decent) job of visualizing the concept behind this post:
Consider a cuboid with the dimensions X,Y,Z along the three spacial dimensions. Imagine taking said cuboid and slowly descending it through a 2-dimensional plane. How would this look?
If we merely took a 1x1x1 cuboid without any rotation, this would be a square popping in and out of existence obviously. But how would this look if we allow the cube to rotate?
We define an initial rotation on the cube across the 3 dimensions (XY, XZ, YZ) and a gradual rotation (XY, XZ, YZ) as well. The cube will be rotated around its center-point, as it’s the most intuitive to do so.
If you don’t want the mathematical details, you can download the .jar file here:
We define the 8 vertices of the cuboid as 8 3-dimensional vectors positioned according to the center of the cube. We also define a rotation function r(x) for each of the vectors (which is simply a rotational matrix).
Definition: Rotating the cuboid (XY, XZ, YZ) means to rotate each of the 8 vectors (XY, XZ, YZ).
Next up, we need to define a cross-section of the cube at a certain height t.
Definition: A line segment is a line going from a point to another point. In this casevectors. A line segment is a line going from the end of one vector to the end of another vector.
The cuboid contains 12 line segments.
Definition: An intersection is the point where a 3-dimensional line and a 2-dimensional plane at height t intersect.
Definition: A cross-section of the cuboid is the set of intersections for each line segment in the cuboid and an infinite 2-dimensional plane (X, Z) at height t (y=t).
We get the cross-section of the cuboid and draw the convex hull of this collection of points.
Going at constant rate for t we get an animation of the cuboid going through flatland (rotating the cuboid for each term).
This was really vaguely described, but I don’t really feel like going into too many details.