8 votos

Área de proyección ortogonal de un cubo tridimensional

Si se le da un cubo tridimensional centrado en el origen, es decir, el centro del cubo está en $(0,0,0)$ . Si giras el cubo en $x$ , $y$ y $z$ dirección, entonces ¿cómo puedes encontrar el área de su proyección ortogonal. Por ejemplo, si no giras el cubo en absoluto, entonces el área es sólo $1$ . Sin embargo, digamos que rotas el cubo $45^ \circ $ a lo largo de la línea $x=y=0$ entonces el área sale a $ \sqrt {2} \cdot 1 = \sqrt {2}$ . ¿Existe una fórmula general para esto en la que se le da una rotación y se tiene que encontrar el área ortogonal proyectada? ¿Qué pasa con la otra forma, es decir, si se te da el área, puedes encontrar las coordenadas del cubo (más interesado en este caso)?

Creo que esto puede estar relacionado con mi pregunta: El ancho de un cubo inclinado Pero, en lugar de ancho, estoy trabajando con el área.

0 votos

Dudo mucho que se pueda resolver el problema inverso, incluso hasta una simetría. La sombra de la proyección ortogonal es un rectángulo o un hexágono, y debería ser posible encontrar pares de estas proyecciones de diferente forma que tengan la misma área.

0 votos

@amd Hmmm. Bien. Qué pasa si te dan una rotación y quieres encontrar el área proyectada. ¿Existe una fórmula general para esto?

12 votos

Parece que esta consulta está relacionada con la pregunta de google code jam codejam.withgoogle.com/2018/challenges/00000000000000cb/… :) ¿No es así?

5voto

AlexanderJ93 Puntos 101

Ahora que las eliminatorias del Code Jam han terminado, publicaré una solución completa.

En primer lugar, sabemos que el área mínima posible es $1$ que es el área de una sola cara. El área máxima es $\sqrt{3}$ que se da en el problema como límite superior para los puntos completos $-$ escrito como la desigualdad $1.000000<A<1.732050$ . También puede ver por qué es el máximo comprobando la respuesta Cabina G proporcionado.

En primer lugar, necesitaremos una forma de calcular el área de un cubo proyectado en función de sus vectores normales. Dejamos que $n_1=(n_{11},n_{12},n_{13}),n_2=(n_{21},n_{22},n_{23}),n_3=(n_{31},n_{32},n_{33})$ son los vectores que apuntan desde el centro del cubo al punto central de 3 caras no paralelas, y $n_p = (0,1,0)$ sea el vector normal del plano. Entonces, si $\phi_i$ es el ángulo entre $n_i$ y $n_p$ el área de la proyección es $A = \sum_{i=1}^3 |\cos\phi_i|$ . Podemos calcular $|\cos\phi_i| =\left|\frac{n_i\cdot n_p}{|n_i||n_p|}\right| = 2|n_{i2}|$ ya que $|n_i|=\frac{1}{2}$ . Esto nos da la fórmula del área $A = 2\sum_{i=1}^3 |n_{i2}| = 2|n_{12}|+2|n_{22}|+2|n_{32}|$ .

A continuación, tenemos que encontrar una configuración que dé la mínima superficie posible y otra que dé la máxima. El área mínima es fácil, ya que es el estado por defecto del cubo. Si escribimos las coordenadas como una matriz $N = (n_{ij})$ podemos ver que una configuración mínima es

$\frac{1}{2}I_3 = \begin{bmatrix}1/2&0&0\\ 0&1/2&0\\ 0&0&1/2\end{bmatrix}$ ,

y el área es el doble de la suma de la segunda fila: $A = 2(0+1/2+0) = 1$ . Se puede encontrar una configuración máxima cuando la diagonal larga del cubo (desde la parte delantera inferior izquierda hasta la parte trasera superior derecha) es paralela a $n_p$ . Para demostrarlo, lo veremos desde un sistema de coordenadas diferente, donde el cubo está alineado con los ejes, con vectores normales $m_i=\frac{1}{2}e_i$ y el vector normal del plano es $m_p = \left(\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}}\right)$ . En esta configuración, el coseno de los ángulos entre las normales del cubo y la normal del plano son $\cos\theta_i = \frac{1}{\sqrt{3}}$ , por lo que el área es $A=\sqrt{3}$ que se sabe que es el máximo.

Entonces, ahora que tenemos una configuración mínima y una configuración máxima, si podemos generar una función continua entre estas dos orientaciones, entonces el Teorema del Valor Intermedio garantizará que hay una solución a la función para cualquier posible $A$ . Para ello, tomamos como eje de rotación la línea $x=z, y=0$ que se escribe como $(\frac{1}{\sqrt{2}},0,\frac{1}{\sqrt{2}})$ en forma vectorial. Sea $\psi$ sea el ángulo en radianes girado sobre este eje desde la configuración mínima inicial. Entonces, $A = f(\psi)$ tiene $f(0) = 1$ . Además, si giramos por alguna cantidad $\psi_m$ alcanzaremos la configuración máxima, por lo que $f(\psi_m) = \sqrt{3}$ .

Para calcular $f(\psi)$ utilizamos la misma fórmula para calcular el área de la proyección, pero multiplicamos cada una de las $n_i$ por la correspondiente matriz de rotación $R = \begin{bmatrix}\frac{1+\cos\psi}{2} & -\frac{\sin\psi}{\sqrt{2}} & \frac{1-\cos\psi}{2}\\ \frac{\sin\psi}{\sqrt{2}} & \cos\psi & -\frac{\sin\psi}{\sqrt{2}} \\ \frac{1-\cos\psi}{2} & -\frac{\sin\psi}{\sqrt{2}} & \frac{1+\cos\psi}{2} \end{bmatrix} $ .

Esto da $N = R(\frac{1}{2}I_3) = \frac{1}{2}R$ y sumando los valores absolutos de la segunda fila se obtiene el área como $A = |\cos\psi|+\sqrt{2}|\sin\psi|$ . Para $0 < \psi < \pi/2$ podemos suprimir los valores absolutos, de modo que $A = f(\psi) = \cos\psi + \sqrt{2}\sin\psi$ . Esta función toma su primer máximo en $\psi_m = 2\tan^{-1}\left(\frac{\sqrt{2}}{1+\sqrt{3}}\right) \approx 0.95532 < \pi/2$ . Así, para un determinado $A$ podemos encontrar $\psi_A = 2\tan^{-1}\left(\frac{\sqrt{2}-\sqrt{3-A^2}}{1+A}\right)$ . Esto nos da (con un poco de trigonometría) $\cos\psi = \frac{1}{3}(A+\sqrt{2}\sqrt{3-A^2})$ y $\sin\psi = \frac{1}{3}(\sqrt{2}A-\sqrt{3-A^2})$ .

Por último, basta con sustituir estos valores en la matriz $N$ para obtener la respuesta final:

$N = \begin{bmatrix}\frac{1}{12}(3+A+\sqrt{6-2A^2}) & \frac{1}{12}(-2A+\sqrt{6-2A^2}) & \frac{1}{12}(3-A-\sqrt{6-2A^2}) \\ \frac{1}{12}(2A-\sqrt{6-2A^2}) & \frac{1}{6}(A+\sqrt{6-2A^2}) & \frac{1}{12}(-2A+\sqrt{6-2A^2}) \\ \frac{1}{12}(3-A-\sqrt{6-2A^2}) & \frac{1}{12}(2A-\sqrt{6-2A^2}) & \frac{1}{12}(3+A+\sqrt{6-2A^2}) \end{bmatrix}$ ,

donde las columnas son las coordenadas de los puntos en el centro de 3 caras no paralelas.

4voto

Budd Puntos 41

Si se considera una rotación en el mismo eje que una de las caras (no sé cómo expresarlo bien), de modo que la proyección sea siempre un rectángulo (NO un hexágono), entonces el área de la proyección será w*d . En el sitio web w es la anchura del cubo y d es la proyección ortogonal de la diagonal a través de la cara inclinada. Para un cubo unitario, esto se puede escribir de forma agradable como

$$ A = \sqrt2cos(\theta) $$

Puedes usar transformaciones matriciales para encontrar las coordenadas del cubo usando tu ángulo.

P.D.: esto sólo servirá para el conjunto de pruebas 1 del problema de codejam

0 votos

La ronda ya ha terminado, si quieres incluir el resto.

1 votos

@Jarred Allen la respuesta exhaustiva de AlexanderJ es mucho mejor que cualquier cosa que yo pueda escribir así que retiro mi promesa ya que él lo ha hecho mejor

3voto

G Cab Puntos 51

Para simplificar los cálculos, vamos a colocar el cubo unitario con un vértice en el origen y las aristas a lo largo de los ejes, de modo que sus vértices sean $(0,0,0),(1,0,0),\cdots (1,1,1)$ .

A continuación, vamos a girar el cubo. Consideramos el eje $z$ como dirección de proyección, y el plano $x,y$ como el plano de proyección.
La rotación alrededor del $z$ sólo producirá una rotación de la forma proyectada, por lo que puede omitirla y considerar sólo la rotación alrededor de $x$ por un ángulo $\alpha$ y alrededor de $y$ por un ángulo $\beta$ .
Debido a la simetría podemos limitar el rango a $[0,\pi/4]$ para los dos ángulos.

Tilted_cube_1

Las matrices
$$ {\bf R}_{\,{\bf x}} (\alpha ) = \left( {\matrix{ 1 & 0 & 0 \cr 0 & {\cos \alpha } & { - \sin \alpha } \cr 0 & {\sin \alpha } & {\cos \alpha } \cr } } \right)\quad {\bf R}_{\,{\bf y}} (\beta ) = \left( {\matrix{ {\cos \beta } & 0 & {\sin \beta } \cr 0 & 1 & 0 \cr { - \sin \beta } & 0 & {\cos \beta } \cr } } \right) $$
cuando se aplica a los vértices del cubo original dará las coordenadas de los rotados,
expresado en el sistema base. El ángulo de rotación es según la regla de la mano derecha.

Para una rotación en el rango anterior, los seis vértices "prominentes" que definen la proyección (véase el esquema anterior) serán
los vectores columna de la siguiente matriz
$$ \left( {\matrix{ 0 & 0 & 0 & 1 & 1 & 1 \cr 0 & 1 & 1 & 0 & 0 & 1 \cr 1 & 1 & 0 & 1 & 0 & 0 \cr } } \right) $$

Multiplicamos entonces los seis vectores (es decir, toda la matriz anterior) por ${\bf R}_{\,{\bf x}} (\alpha ){\bf R}_{\,{\bf y}} (\beta )$ .
Invertir el orden de la multiplicación sólo conducirá a un intercambio entre $\alpha$ y $\beta$ en los siguientes resultados.

Sobre los vectores obtenidos, ponemos a cero el $z$ para obtener la proyección sobre el $x,y$ plano.
En realidad, es mejor que lo pongamos a $1$ para obtener los puntos en coordenadas homogéneas y calcular el área
tomando el determinante. Indiquemos tales vectores como $\bf u_1,\cdots,\bf u_6$ .
Entonces, mirando el esquema, el Área estará dada por la suma de los dos determinantes
$$ \eqalign{ & A = \left| {\left( {\matrix{ {{\bf u}_{\,1} } & {{\bf u}_{\,2} } & {{\bf u}_{\,3} } \cr } } \right)} \right| - \left| {\left( {\matrix{ {{\bf u}_{\,1} } & {{\bf u}_{\,3} } & {{\bf u}_{\,4} } \cr } } \right)} \right| = \cr & = \sin \alpha + \cos \alpha \left( {\cos \beta + \sin \beta } \right) = \cr & = \sin \alpha + {{\sqrt 2 } }\cos \alpha \cos \left( {\beta - \pi /4} \right) \cr} $$
donde el signo menos delante del segundo determinante es para hacerlo positivo en el rango considerado
para los ángulos.

Un gráfico de $A(\alpha,\beta)$ se indica a continuación.

Tilted_cube_2

$A$ alcanza su máximo $=\sqrt{3}$ en $\beta = \pi/4,\; \alpha = \arctan(\sqrt{2} /2) \approx {35.26}^\circ$ .

Entonces el problema que planteas, de encontrar los ángulos de rotación dados $ 1 \le A \le \sqrt{3}$ en general tiene múltiples soluciones, que se pueden encontrar resolviendo la identidad anterior, al fijar un valor apropiado de $\alpha$ o $\beta$ .

3voto

Emanuele Paolini Puntos 14186

Sucede que el área de la proyección de un cubo unitario en un plano es numéricamente igual a la longitud de la proyección sobre la línea ortogonal.

Referencia: https://londmathsoc.onlinelibrary.wiley.com/doi/abs/10.1112/blms/16.3.278

Este hecho puede simplificar el problema ya que sabemos que la sombra mínima viene dada por la altura del cubo, que es 1. Y la máxima viene dada por la longitud de su diagonal que es $\sqrt 3$ . Si partimos de un cubo horizontal con la diagonal en el $xz$ -plano podemos girar en el $xz$ para que la altura del cubo sea igual a la coordenada z de la diagonal rotada y, por lo tanto, se pueda calcular fácilmente.

Para ser más precisos, supongamos que el cubo tiene las aristas paralelas a los ejes de coordenadas. Primero lo giramos en el $xy$ -plano para que la diagonal entre en el plano $y=0$ . Para ello, debemos aplicar esta matriz de rotación: $$ R = \begin{pmatrix} \sqrt 2 /2 & \sqrt 2/2 & 0 \\ -\sqrt 2 /2 & \sqrt 2/2 & 0 \\ 0 & 0 & 1 \end{pmatrix}. $$ A continuación, aplicamos la rotación de un ángulo $\theta$ alrededor del $y$ eje: $$ T_\theta = \begin{pmatrix} \cos \theta & 0 & -\sin\theta \\ 0 & 1 & 0 \\ \sin \theta & 0 & \cos \theta \end{pmatrix}. $$

El área de la proyección debe ser igual al $z$ coordenada de la diagonal rotada. Así que debería ser: $$ (0,0,1)\cdot T_\theta \cdot R \cdot \begin{pmatrix}1\\1\\1\end{pmatrix} $$ while the coordinates of the center of the faces (as requested in the codejam problem) can be easily computed by appling $T_\theta R$ to the original coordinates which are (for a unit cube centered in the origin): $$ T_\theta R \begin{pmatrix}1/2 \\ 0 \\ 0\end{pmatrix} \qquad T_\theta R \begin{pmatrix}0 \\ 1/2 \\ 0\end{pmatrix} \qquad T_\theta R \begin{pmatrix}0 \\ 0 \\ 1/2 \end{pmatrix}. $$

1voto

amd Puntos 2503

La imagen de cada cara del cubo es un paralelogramo, posiblemente uno que ha colapsado a un segmento de línea. Como la proyección es ortogonal, el plano de la imagen puede trasladarse sin afectar al tamaño o la forma de la imagen del cubo. Supongamos por ahora que está colocado de forma que no intersecte al cubo. No lo demostraré formalmente aquí, pero un poco de reflexión y visualización debería convencerte de que la sombra del cubo es la unión de las imágenes de las tres caras más cercanas al plano imagen, es decir, las tres caras que se encuentran en el vértice más cercano al plano imagen. Si hay dos vértices equidistantes, podemos elegir cualquiera de ellos porque las caras que no son comunes a ambos son ortogonales al plano de la imagen, y del mismo modo cuando hay cuatro vértices equidistantes, sólo su cara común contribuye al área de la sombra. Estos tres paralelogramos se cruzan sólo a lo largo de sus aristas, por lo que el área de la sombra es sólo la suma de las áreas de estos paralelogramos. Las imágenes de las caras opuestas son congruentes, por lo que no necesitamos averiguar qué vértice está más cerca del plano de la imagen. Podemos elegir tres caras cualesquiera que se encuentren en un vértice común y sumar las áreas de sus imágenes para obtener el área total de la sombra.

Para simplificar los cálculos, podemos girar el plano de la imagen en lugar de girar el cubo. Sea $\mathbf n$ sea una normal unitaria del plano de la imagen, que ahora consideramos que pasa por el origen. El tamaño y la forma de la imagen tampoco se ven afectados por las traslaciones del cubo, por lo que, por ejemplo, lo colocamos de forma que tenga un vértice en el origen y esté dentro del primer octante. También podemos suponer un cubo unitario. Todas las transformaciones implicadas son lineales, por lo que el área de la sombra del cubo unitario sólo necesita ser escalada por el cuadrado de la longitud del lado para obtener el área real.

La proyección ortogonal de un vector $\mathbf v$ en el plano de la imagen es su rechazo ortogonal de $\mathbf n$ : $$P\mathbf v = \mathbf v - (\mathbf n^T\mathbf v)\mathbf n = (I-\mathbf n\mathbf n^T)\mathbf v.$$ Los vectores base estándar $\mathbf i$ , $\mathbf j$ y $\mathbf k$ son tres aristas del cubo que comparten un vértice y las áreas de las imágenes de las caras que definen son las normas de los productos cruzados por pares de $P\mathbf i$ , $P\mathbf j$ , $P\mathbf k$ . Tomando los dos primeros, tenemos $$\|P\mathbf i\times P\mathbf j\| = \|\operatorname{cof}(P)(\mathbf i\times\mathbf j)\| = \|\operatorname{cof}(P)\mathbf k\| = \|(I-P)\mathbf k\| = |n_z| $$ y de forma similar para las otras dos caras. (También se podría argumentar que los objetos planos se escoran en un factor igual al coseno del ángulo diedro). Por tanto, el área de la sombra del cubo unitario es igual a $|n_x|+|n_y|+|n_z|$ y el área de la sombra de un cubo de lado $s$ es $$s^2(|n_x|+|n_y|+|n_z|).$$ Esta expresión es simétrica en los tres componentes de $\mathbf n$ por lo que será máxima cuando $n_x=n_y=n_z=\pm\frac1{\sqrt3}$ .

Volviendo al problema original en el que se rota el cubo, no has especificado el plano de la imagen en tu pregunta. Supongamos que es el $x$ - $y$ plano, que tiene la normalidad $\mathbf k$ . Rotar el cubo equivale a aplicar la rotación inversa a la normal del plano de la imagen, por lo que nuestra normal rotada $\mathbf n$ es la última fila de la matriz de rotación del cubo.

Para pasar de una zona de sombra determinada $A\in[1,\sqrt3]$ a una rotación que produzca esa área, queda claro por lo anterior que se puede elegir cualquier vector unitario $\mathbf n$ con $|n_x|+|n_y|+|n_z|=A$ y $n_x^2+n_y^2+n_z^2=1$ . Es decir, $\mathbf n$ se encuentra en las intersecciones de la esfera unitaria con los ocho planos $\pm x\pm y\pm z=A$ . Estos planos están a una distancia de $\frac1{\sqrt3}A$ desde el origen, por lo que las intersecciones son círculos de radio $r=\sqrt{1-\frac13A^2}$ . Por simetría, podemos ceñirnos al primer octante, y una opción no poco razonable es $$\mathbf n(A) = \frac A3(1,1,1)+\frac r{\sqrt6}(-1,-1,2) = \frac16\left(2A-\sqrt{6-2A^2},2A-\sqrt{6-2A^2},2A+2\sqrt{6-2A^2}\right),$$ que está más cerca del $z$ -eje. Habiendo fijado $\mathbf n$ Ahora hay que encontrar una rotación que la haga corresponder con el $z$ -eje, un problema bien estudiado. (Yo estaría tentado de hacer trampa y usar un reflejo en su lugar porque eso es mucho más fácil y menos costoso de construir). Si necesitas los centros de las caras del cubo rotado, recuerda que las columnas de una matriz de transformación son las imágenes de los vectores base, así que las columnas de la matriz de rotación son las tres normales de las caras independientes del cubo rotado. Son vectores unitarios, así que multiplícalos por $\frac12$ . Por último, si se fija el eje de rotación como $(1,-1,0)^T$ , que es paralelo a $\mathbf n(A)\times\mathbf k$ y calcular la matriz de rotación en función de $A$ obtendrás algo muy parecido al resultado final de la respuesta de AlexanderJ93.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X