4 votos

Redimensionar un rectángulo para que siempre quepa en su espacio no girado

(Para aquellos que vienen aquí buscando respuestas a los problemas del rectángulo puede ayudar el ver la pregunta relacionada (y resuelta): Dada la anchura, la altura y el ángulo de un rectángulo, y un tamaño final permitido, determinar cuán grande o pequeño debe ser para encajar en la zona )

Supongamos que tengo un rectángulo giratorio que quiero llenar un espacio de 100x20.

Pero al girar, en lugar de mantener la proporción de los lados, quería que el rectángulo escalara con su altura para que siempre encajara dentro del espacio original. Aquí hay un ejemplo: Tengo el rectángulo en rojo y su espacio original en azul claro, con la esquina superior izquierda marcada como un círculo azul. Los números de la derecha representan grados.

A medida que el rectángulo rojo gira, cambia sus dimensiones para permanecer siempre dentro del tamaño original.

enter image description here

De tal manera que lo que una vez fue un rectángulo de 100x20 está ahora a 45 grados un rectángulo de 14x14 (o algo así).

¿Cómo podría determinarse el tamaño del rectángulo rojo para un ángulo determinado?

4voto

bizzurnzz Puntos 31

Supongamos que su rectángulo exterior $R$ es de tamaño $(2w,2h)$ con $w\geq h$ y $0<\theta<\pi/2$ . En el sistema de coordenadas centrado alrededor del centro de $R$ y girado un ángulo $\theta$ el rectángulo centrado con la esquina superior derecha $(x,y)$ y con ejes paralelos a los ejes del sistema de coordenadas está contenido en $R$ sólo si \begin{aligned} x\sin\theta + y\cos\theta&\leq h\\ x\cos\theta + y\sin\theta&\leq w\\ x,y&\geq 0 \end{aligned} Se trata de un polígono convexo $P$ que contiene 0 y la función objetivo $f(x,y)=xy$ es no negativo y 2-homogéneo, por lo que el máximo se alcanzará en la frontera. Dado que $f$ es mínimo cuando $x=0$ o $y=0$ sólo tenemos que considerar los puntos en los que al menos uno de \begin{aligned} x\sin\theta + y\cos\theta = h &\qquad(E_h)\\ x\sin\theta + y\cos\theta = w &\qquad(E_w)\\ \end{aligned} es cierto, es decir $$\arg\max_P f \subseteq P\cap(E_h\cup E_w)$$

En el caso general $\theta\neq\pi/4$ , $E_h$ y $E_w$ se cruzan en un único punto $(x_0,y_0) = 1/\cos 2\theta \cdot \left(w\cos\theta - h\sin\theta, h\cos\theta - w\sin\theta\right)$ .

$f$ es cóncava en $E_h$ y $E_w$ Así que $$\arg\max_P f \subseteq (P\cap\arg\max_{E_h} f) \cup (P\cap\arg\max_{E_w} f) \cup \{(x_0,y_0)\}$$

En $E_h$ un cálculo rápido muestra que el máximo de $f$ se alcanza en $(x,y)=h/2\cdot\left(1/\sin\theta,1/\cos\theta\right)$ que se encuentra en el interior $P$ si $w/h\geq 1/\sin 2\theta$ .

En $E_w$ , $P\cap\arg\max_{E_w} f$ está vacío, de lo contrario tendríamos $h/w\geq 1/\sin 2\theta>1$ lo que contradiría $w\geq h$ .


Comparación de $f(x,y)$ en los dos casos, encontramos que el máximo es:

  • $(x,y)=h/2\cdot\left(1/\sin\theta,1/\cos\theta\right)$ cuando $w/h\geq 1/\sin 2\theta$
  • $(x,y) = 1/\cos 2\theta \cdot \left(w\cos\theta - h\sin\theta, h\cos\theta - w\sin\theta\right)$ cuando $w/h\leq 1/\sin 2\theta$

En $\theta=\pi/4$ el máximo es $x=y=h/2$ .

3voto

dtldarek Puntos 23441

En primer lugar, puede haber varios rectángulos que cumplan sus condiciones, por ejemplo

rectangles with same angle si desea un ángulo específico del rectángulo, o

rectangles with same boundary point si desea especificar un punto en el límite.

Sin embargo, existe un caso especial en el que sólo hay como máximo un rectángulo, es decir, si se supone que tiene que tocar sus dos límites. En ese caso es fácil calcularlo. Sitúe el origen (punto $(0,0)$ ) en el centro de la frontera (el centro del círculo), y sea $(C_x,C_y)$ sea la esquina superior derecha del límite (el rectángulo del límite tiene un tamaño $2C_x \times 2C_y$ ). Sea $(x,y)$ sea el vértice superior derecho del rectángulo pequeño, entonces cumple las condiciones ( $\alpha > 0$ significa rotación en sentido contrario a las agujas del reloj):

\begin{align*} \left[\begin{matrix}x'\\\ C_y\end{matrix} \right] &= \left[ \begin{matrix}\cos\alpha&-\sin\alpha\\\sin\alpha&\cos\alpha\end{matrix}\right]\left[\begin{matrix}x\\\y\end{matrix}\right] \\\ \left[\begin{matrix}C_x\\\ y'\end{matrix} \right] &= \left[ \begin{matrix}\cos\alpha&-\sin\alpha\\\sin\alpha&\cos\alpha\end{matrix}\right]\left[\begin{matrix}x\\\ -y\end{matrix} \ right] \end{align*}

donde $x'$ y $y'$ son sólo marcadores de posición. Extrayendo las filas apropiadas de esas fórmulas, podemos transformarlas en una ecuación (fíjate en la ausencia del signo menos en la matriz):

\begin{align*} \left[\begin{matrix}C_x\\\ C_y\end{matrix} \right] &= \left[ \begin{matrix}\cos\alpha&\sin\alpha\\\sin\alpha&\cos\alpha\end{matrix}\right]\left[\begin{matrix}x\\\ y\end{matrix} \ right] \end{align*}

siendo la solución:

\begin{align*} \left[\begin{matrix}\cos\alpha&\sin\alpha\\\sin\alpha&\cos\alpha\end{matrix}\right]^{-1} \izquierda[ \begin{matrix}C_x\\\ C_y\end{matrix} \right] &= \left[ \begin{matrix}x\\\ y\end{matrix} \ derecho] \\\ \izquierda[ \begin{matrix}\cos\alpha&-\sin\alpha\\\ -\sin\alpha&\cos\alpha\end{matrix} \ derecha] \izquierda[ \begin{matrix}C_x\\\ C_y\end{matrix} \right] &= \left[ \begin{matrix}x\\\ y\end{matrix} \right] \end{align*}

Tenga en cuenta que esto puede no tener una solución adecuada si $\alpha$ ¡es demasiado grande!

Edita: Ok, se me pasó el comentario sobre maximizar el área. Por otra parte, considere este ejemplo:

rectangles with given angle

La figura gris es un rombo (se creó girando el rectángulo negro en $2\alpha$ ). Para obtener el rectángulo inscrito de mayor área, consideremos el caso en que el rombo fuera un cuadrado: el área mayor sería cuando cada vértice del rectángulo parte por la mitad la arista del rombo (porque entonces también es un cuadrado y ése es el rectángulo de mayor área y perímetro dado). Pero podemos escalar nuestro rombo (que puede no ser un cuadrado) para que sea un cuadrado, obtener allí la solución y luego volver a escalar (¡el área se escalará en consecuencia!). En conclusión, el rectángulo de mayor área dividirá los bordes del rombo por la mitad.

¿Cómo calcularlo? Podrías hacerlo utilizando el mismo método:

\begin{align*} \left[\begin{matrix}x'\\\ C_y\end{matrix} \right] &= \left[ \begin{matrix}\cos\alpha&-\sin\alpha\\\sin\alpha&\cos\alpha\end{matrix}\right]\left[\begin{matrix}x\\\y\end{matrix}\right] \\\ \left[\begin{matrix}x''\\\ -C_y\end{matrix} \derecha] &= \left[ \begin{matrix}\cos(-\alpha)&-\sin(-\alpha)\\\sin(-\alpha)&\cos(-\alpha)\end{matrix}\right] \left[\begin{matrix}x\\\ -y\end{matrix} \right] \end{align*}

Sin embargo, se puede hacer de forma más sencilla: el vértice del rectángulo inscrito parte el borde gris por la mitad, de modo que $$2x\sin\alpha = C_y = 2y\cos\alpha\,.$$ Esto funciona si $C_x > C_y$ de lo contrario tendrá que hacer lo mismo para $C_x$ en su lugar. Además, aunque $C_x > C_y$ todavía hay que comprobar si el rectángulo girado encaja en el límite (porque puede ser que $C_x = C_y + \varepsilon $ ), si no, la solución de la parte anterior servirá.

Espero que le sirva de ayuda ;-)

2voto

Jim Puntos 1896

Considera el siguiente caso especial, del que todos los demás casos son reflejos, creo, y que es el reflejo izquierda-derecha de tu imagen de ejemplo.

  • El rectángulo es más ancho que alto.
  • El ángulo de rotación, llámese $θ_r$ está en el sentido contrario a las agujas del reloj y entre 0 y π/2 (90°).

Como estamos girando alrededor de un centro, vamos a introducir algunas coordenadas polares, siendo el centro de los rectángulos el origen.

Considera el punto que es la esquina superior derecha del rectángulo, y llámalo $(x_p,y_p)$ . Sus coordenadas polares son $$(r_p,θ_p) = (\sqrt{x_p^2+y_p^2}, \operatorname{atan2}(y_p, x_p)).$$ Tenga en cuenta que $θ_r$ no es $θ_p$ pero $θ_r + θ_p$ es el ángulo del punto superior derecho del rectángulo rotado.

Ahora tenemos que encontrar el radio polar de ese punto. Obsérvese que, para rotaciones menores que π/2, ese punto está en algún punto de la recta $y = y_p$ . La ecuación polar de esa recta es $r = y_p \csc θ$ Así que la cuestión es $$(y_p \csc(θ_r+θ_p), θ_r+θ_p).$$

(Si lo que quieres no son los puntos de las esquinas del nuevo rectángulo, sino simplemente un factor de escala, entonces detente aquí y toma el cociente de los semidiágonos de los rectángulos original y rotado, es decir, $\frac{y_p \csc(θ_r+θ_p)}{r_p}$ .)

A continuación, hallamos la forma cartesiana de ese punto y simplificamos algebraicamente:

$$\begin{align*}&(y_p \csc(θ_r+θ_p) \cos(θ_r+θ_p), y_p \csc(θ_r+θ_p) \sin(θ_r+θ_p)) \\ = &(y_p \cot(θ_r+θ_p), y_p) \\ = &(y_p \cot(θ_r+\operatorname{atan2}(y_p, x_p)), y_p) \end{align*}$$

Esto nos da la esquina superior derecha. La inferior izquierda es, por supuesto, su imagen especular; ahora necesitamos la esquina inferior derecha (y su espejo, la superior izquierda). Esta esquina tiene el mismo radio, pero el ángulo $θ_r-θ_p$ por lo que la fórmula

$$\begin{align*} &(y_p \csc(θ_r+θ_p) \cos(θ_r-θ_p), y_p \csc(θ_r+θ_p) \sin(θ_r-θ_p)) \\ \end{align*}$$

Simplificar trigonométricamente esta expresión ha superado mi entusiasmo, pero según mis gráficas funciona. También me doy cuenta de que a medida que cambia el ángulo, todos los puntos siguen líneas rectas, lo que sugiere que podría haber algún reparameterization del problema de tal manera que es en su mayoría fórmulas lineales y una fórmula trigonométrica del ángulo de rotación y relación de aspecto.

1voto

theog Puntos 585

Dejaría esto como un comentario ya que no tengo tiempo para elaborarlo hasta el final, pero es un poco demasiado largo para eso.

Dos observaciones deberían simplificar el camino hacia la solución:

  1. En lugar de girar el rectángulo rojo, deja que su orientación sea fija y gira el rectángulo azul que lo contiene en la dirección opuesta. Ahora dejemos que las dos esquinas del rectángulo rojo sean $(0,0)$ y $(x,y)$ . Todo lo que tienes que hacer es maximizar $xy$ .

  2. Creo que se puede demostrar que, debido a la simetría, sólo importa el lado más corto del rectángulo azul. Si esa longitud es $w$ se tiene la restricción de que $(x,y)$ se encuentra en la línea a una distancia $w$ desde el origen, orientada en ángulo $\theta$ . Ahora bien, se podría seguir adelante y aplicar directamente el cálculo aquí, pero es mejor considerar los multiplicadores de Lagrange y observar que el gradiente del objetivo $xy$ debe ser normal a la línea de restricción. Dado que el gradiente de $xy$ tiene una forma especialmente sencilla, esto debería conducir directamente a una solución ordenada.

Por supuesto, después de esto todavía tienes que transformar el rectángulo de nuevo a la orientación original y centrarlo, pero eso es algo bastante rutinario.

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