I'm projecting a cube onto a hexagon (for RGB to HSL conversion) and I want to calculate the width of the hexagon.

Cube is, first, tilted by 45° ccw on the x axis, and then, tilted by 35.26° ccw on the y axis. Black corner is at the bottom and the white corner is at the top. Both (black and white) corners pass through the z axis.


I have four values at hand, but don't know what to do with them, atm. I can get the width of the hexagon with this 3D software, but I need to be able to calculate it mathematically.

  • $\begingroup$ With the annotated angles I don't think you'll have a regular hexagon. Use $60°$ and $30°$. $\endgroup$ – N74 Aug 26 '16 at 18:03
  • $\begingroup$ @N74 These angles give the desired result. Perhaps the image I've provided or my explanation wasn't clear. I can post another image. $\endgroup$ – akinuri Aug 26 '16 at 18:21
  • $\begingroup$ If the hexagon is exactly like the one to the left of the picture you are on the right way. But that is not a regular hexagon, with all angles congruent. $\endgroup$ – N74 Aug 26 '16 at 22:29
  • $\begingroup$ This might help. I'm explaining the projection process. $\endgroup$ – akinuri Aug 27 '16 at 8:13
  • $\begingroup$ If you want to draw an hexagon, forget the projections. Start with blue point at coordinates (0, 0), the black point will be at coords (0, -1). The green point will be at coords (-.866, -.5) and the red at (.866, -.5). The cyan point will be at coords (-.866, .5) and the magenta at (.866, .5). Finally the white point will be at (0, 1). The values are $.5=\sin 30°=\cos 60°$ and $.866=\sin 60°=\cos 30°$. To scale with RGB values multiply by 255 (and eventually translate to center the image). $\endgroup$ – N74 Aug 27 '16 at 11:37

Based on your technical drawing with measurements posted in it, the width $H$ of the hexagon can be deduced with simple trigonometry: $$ H = 360.62\cos\,(54.74^\circ) + 255\cos\,(35.26^\circ). $$

And in general, for any angle $\theta$ that you tilt the cube of side length $w$ and face-diagonal length $\sqrt 2 \cdot w$ over, the width $H$ of the hexagon will be $$ H = \sqrt 2 \cdot w\cos\,(\pi/2 - \theta) + w\cos\,\theta. $$

  • $\begingroup$ I'll be doing the calculation in JavaScript and my trigonometry knowledge is limited. How would I write 360.62cos(54.74°)? This 360.62 * Math.cos(54.74)? That doesn't give the correct width. $\endgroup$ – akinuri Aug 26 '16 at 17:23
  • $\begingroup$ @akinuri, Since JS uses radians instead of degrees, you'll first have to convert your degrees into radians. There is a function for doing this on this question: stackoverflow.com/questions/9705123/… $\endgroup$ – Alex Ortiz Aug 26 '16 at 17:26
  • $\begingroup$ Ah, yes, sorry. My bad. I knew that. Working now :) $\endgroup$ – akinuri Aug 26 '16 at 17:28
  • $\begingroup$ For this particular problem, you do not need trigonometry. Just the formula $\text{(width)} = 2 \text{(edge)} \sqrt{2/3}$. $\endgroup$ – Futurologist Aug 26 '16 at 18:10

What you are saying is that basically one of the cube 3D diagonals, connecting the what-you-call-white vertex to the opposite black vertex, is aligned with the $z$ axis and you are looking at the shadow the cube casts on the $x,y$ plane projected along light rays parallel to the $z$ axis.

Let $O$ be the origin of the coordinate system and thus it is the lowest vertex of the cube. Let the highest vertex is $O'$ which is the opposite to $O$ across the center of the cube. $OO'$ lies on the $z$ axis. Now let $A, B, C$ be the three vertices of the cube immediately attached by edges to $O$. That is $OA, OB, OC$ are the three pairwise orthogonal edges meeting at $O$. Similarly, let $A', B', C'$ be the three pairwise orthogonal edges meeting at $O'$.

Assume all the edges of the cube have length $a$. Now, the planes $ABC$ and $A'B'C'$ are orthogonal to the diagonal $OO'$ i.e. they are orthogonal to the $z$ axis and thus parallel to the $x,y$ plane. The two triangles $ABC$ and $A'B'C'$ are equilateral triangles with edgelength $a\sqrt{2}$. Therefore the orthogonal projection $A_1B_1C_1$ of $ABC$ is also a congruent equilateral triangle of edge length $a\sqrt{2}$. The same is true for the projection $A'_1B'_1C'_1$ of $A'B'C'$. The two equilateral triangles $A_1B_1C_1$ and $A'_1B'_1C'_1$ share a common center, the point $O$ and are related to each other by a rotation of angle $\pi$ (180 degrees). The shadow of the cube is the regular hexagon spanned by the points $A_1C'_1B_1A'_1C_1B'_1$ and you know the length of the segment $A_1B_1 =a \sqrt{2}$. Since triangle $A_1B_1A'_1$ is right angled and the diagonal of the hexagon $A_1A_1' = 2 B_1A'_1 = 2x$ (the latter is the edge of the hexagon). Therefore, by Pythagoras' theorem $4x^2 - x^2 = 2a^2$ which means that $x = a\sqrt{\frac{2}{3}}$ is the edge of the regular hexagon (the projection of the cube). Then, the diagonals of the hexagon are of length $2x = 2 a\sqrt{\frac{2}{3}}$, which is also the diameter (the width) of the hexagon you are looking for.

In your case, for a cube of edge-length $a=255$, the width of its projection is $$2 \cdot 255 \cdot \sqrt{\frac{2}{3}}=416.41325627314...$$


The width of the hexagon can be calculated by cosine of the angles. The width of the hexagon


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.