Orthogonal Projection Area of a 3D Cuboid

145 Views Asked by At

This problem is asking the same as this problem, but is a cuboid instead of a cube and the independant variables are the roll, pitch, and yaw. I wrote some Mathematica code that finds the area numerically.

Here is the Mathematica code:

    randomEdgeLengths={RandomReal[{0,5}],RandomReal[{0,5}],RandomReal[{0,5}]}; 
    w=randomEdgeLengths[[1]];
    l=randomEdgeLengths[[2]];
    h=randomEdgeLengths[[3]];
    vertices=Flatten[Table[{x*l, y*w, z*h}, {x, 0, 1}, {y, 0, 1}, {z, 0, 1}], 2];
(* vertices = {{0,0,0},{0,0,h},{0,w,0},{0,w,h},{l,0,0},{l,0,h},{l,w,0},{l,w,h}} *)
    α = RandomReal[{0,2π}];
    β = RandomReal[{0,2π}];
    γ = RandomReal[{0,2π}];
    rotationMatrixTransorm = RollPitchYawMatrix[{α, β, γ}];
    rotatedBoxPoints=Dot[vertices,rotationMatrixTransorm];
    (* Just matrix multiplication directly above *)
    xyProjectionPoints=Drop[rotatedBoxPoints,0,-1];
(*Removes the third coordinate of each element for a projection*)
    silouetteArea= Area[ConvexHullRegion[xyProjectionPoints]]

A Mathematica demonstration using different code gives a visualization of the same problem here.

 - Vertices = $\left(
\begin{array}{ccc}
 0 & 0 & 0 \\
 0 & 0 & h \\
 0 & w & 0 \\
 0 & w & h \\
 l & 0 & 0 \\
 l & 0 & h \\
 l & w & 0 \\
 l & w & h \\
\end{array}
\right) $
 - Rotation Matrix = $\left(
\begin{array}{lll}
 \cos (\alpha ) \cos (\beta ) & \sin (\alpha ) (-\cos (\beta )) & \sin (\beta ) \\
 \cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin (\alpha ) \cos (\gamma ) & \cos
   (\alpha ) \cos (\gamma )-\sin (\alpha ) \sin (\beta ) \sin (\gamma ) & -\cos
   (\beta ) \sin (\gamma ) \\
 \sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma ) & \sin
   (\alpha ) \sin (\beta ) \cos (\gamma )+\cos (\alpha ) \sin (\gamma ) & \cos (\beta
   ) \cos (\gamma ) \\
\end{array}
\right) $
 - Rotation Box Points = $\left(
\begin{array}{lll}
 0 & 0 & 0 \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma )) & h
   (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos (\alpha ) \sin (\gamma )) & h
   \cos (\beta ) \cos (\gamma ) \\
 w (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin (\alpha ) \cos (\gamma )) & w
   (\cos (\alpha ) \cos (\gamma )-\sin (\alpha ) \sin (\beta ) \sin (\gamma )) & -w
   \cos (\beta ) \sin (\gamma ) \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma ))+w
   (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin (\alpha ) \cos (\gamma )) & h
   (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos (\alpha ) \sin (\gamma ))+w
   (\cos (\alpha ) \cos (\gamma )-\sin (\alpha ) \sin (\beta ) \sin (\gamma )) & h
   \cos (\beta ) \cos (\gamma )-w \cos (\beta ) \sin (\gamma ) \\
 l \cos (\alpha ) \cos (\beta ) & -l \sin (\alpha ) \cos (\beta ) & l \sin (\beta )
   \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma ))+l \cos
   (\alpha ) \cos (\beta ) & h (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos
   (\alpha ) \sin (\gamma ))-l \sin (\alpha ) \cos (\beta ) & h \cos (\beta ) \cos
   (\gamma )+l \sin (\beta ) \\
 l \cos (\alpha ) \cos (\beta )+w (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin
   (\alpha ) \cos (\gamma )) & w (\cos (\alpha ) \cos (\gamma )-\sin (\alpha ) \sin
   (\beta ) \sin (\gamma ))-l \sin (\alpha ) \cos (\beta ) & l \sin (\beta )-w \cos
   (\beta ) \sin (\gamma ) \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma ))+l \cos
   (\alpha ) \cos (\beta )+w (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin
   (\alpha ) \cos (\gamma )) & h (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos
   (\alpha ) \sin (\gamma ))-l \sin (\alpha ) \cos (\beta )+w (\cos (\alpha ) \cos
   (\gamma )-\sin (\alpha ) \sin (\beta ) \sin (\gamma )) & h \cos (\beta ) \cos
   (\gamma )+l \sin (\beta )-w \cos (\beta ) \sin (\gamma ) \\
\end{array}
\right) $
 
 - xyProjectionPoints = $\left(
\begin{array}{ll}
 0 & 0 \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma )) & h
   (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos (\alpha ) \sin (\gamma )) \\
 w (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin (\alpha ) \cos (\gamma )) & w
   (\cos (\alpha ) \cos (\gamma )-\sin (\alpha ) \sin (\beta ) \sin (\gamma )) \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma ))+w
   (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin (\alpha ) \cos (\gamma )) & h
   (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos (\alpha ) \sin (\gamma ))+w
   (\cos (\alpha ) \cos (\gamma )-\sin (\alpha ) \sin (\beta ) \sin (\gamma )) \\
 l \cos (\alpha ) \cos (\beta ) & -l \sin (\alpha ) \cos (\beta ) \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma ))+l \cos
   (\alpha ) \cos (\beta ) & h (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos
   (\alpha ) \sin (\gamma ))-l \sin (\alpha ) \cos (\beta ) \\
 l \cos (\alpha ) \cos (\beta )+w (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin
   (\alpha ) \cos (\gamma )) & w (\cos (\alpha ) \cos (\gamma )-\sin (\alpha ) \sin
   (\beta ) \sin (\gamma ))-l \sin (\alpha ) \cos (\beta ) \\
 h (\sin (\alpha ) \sin (\gamma )-\cos (\alpha ) \sin (\beta ) \cos (\gamma ))+l \cos
   (\alpha ) \cos (\beta )+w (\cos (\alpha ) \sin (\beta ) \sin (\gamma )+\sin
   (\alpha ) \cos (\gamma )) & h (\sin (\alpha ) \sin (\beta ) \cos (\gamma )+\cos
   (\alpha ) \sin (\gamma ))-l \sin (\alpha ) \cos (\beta )+w (\cos (\alpha ) \cos
   (\gamma )-\sin (\alpha ) \sin (\beta ) \sin (\gamma )) \\
\end{array}
\right) $

UPDATED SOLUTION (This is the HosamH's genius solution):

    randomEdgeLengths={RandomReal[{0,5}],RandomReal[{0,5}],RandomReal[{0,5}]}; 
    w= RandomReal[{0,5}];
    l=RandomReal[{0,5}];
    h=RandomReal[{0,5}];
    vertices=Flatten[Table[{x*l, y*w, z*h}, {x, 0, 1}, {y, 0, 1}, {z, 0, 1}], 2];
    α  = RandomReal[{0,2π}];
    β = RandomReal[{0,2π}];
    γ = 0; (* Can be generalized easily enough *)
    rotationMatrixTransorm =Transpose[ RollPitchYawMatrix[{β, α , 0},{3,2,1}]];
    rotatedBoxPoints=Dot[vertices,rotationMatrixTransorm];
    xyProjectionPoints=Drop[rotatedBoxPoints,0,-1];
    silouetteArea= {Area[ConvexHullRegion[xyProjectionPoints]],
w*h*Abs[Sin[α]Cos[β]]+l*h*Abs[Sin[α]Sin[β]]+w*l*Abs[Cos[α]] }
1

There are 1 best solutions below

22
On BEST ANSWER

As derived in the solution of this problem, the expression, after adapting the expression for different side lengths $w, l , h$, we have (Assuming that before the rotations, $l$ is along the $x$ axis, $w$ is along the $y$ axis, and $h$ is along the $z$ axis):

$ A(\theta_1, \theta_2) = w h | \sin \theta_1 \cos \theta_2 | + l h | \sin \theta_1 \sin \theta_2 | + w l | \cos \theta_1 | $

Since $ u = [ |\sin \theta_1 \cos \theta_2 | , | \sin \theta_1 \sin \theta_2 | , | \cos \theta_1 | ]^T$ is a unit vector, then it follows by the Cauchy-Schwarz inequality that

$ A \le \sqrt{ w^2 h^2 + l^2 h^2 + w^2 l^2 } $

i.e.

$ A_{Max} = \sqrt{ w^2 h^2 + l^2 h^2 + w^2 l^2 } $

which is attainable by proper choice of $\theta_1$ and $\theta_2$.