8 votos

Rectángulo alineado con el eje inscrito en un rectángulo girado

Empiezo con un rectángulo alineado con el eje, $R$ que giro por el ángulo $\theta$ para obtener $R'$ .

Después me gustaría identificar otro rectángulo alineado con el eje, $P$ con las siguientes restricciones adicionales:

  1. El centro de $P$ debe estar en el centro de $R'$ (y $R$ )
  2. Todos los puntos del interior $P$ también debe estar dentro de $R'$
  3. $P$ debe ser lo más grande posible, en cuanto a superficie

¿Cuál es la anchura y la altura de $P$ en función de la anchura y la altura de $R$ y $\theta$ ?

No estoy seguro de si estos criterios identifican un rectángulo de forma única. Si no es así, por favor ilumíname :)


He intentado aplicar mi cerebro al problema, pero parece que estoy lo suficientemente fuera de práctica como para que esto sea demasiado difícil. De ahí este grito de ayuda ;)

He encontrado una pregunta relacionada que parece ser la misma pregunta, pero la respuesta es para otra pregunta: Rectángulo en rectángulo delimitador rotado

Creo que también he encontrado la misma pregunta en stack overflow, pero las respuestas son desordenadas, y las que he conseguido leer y poner en práctica resultan ser erróneas: https://stackoverflow.com/questions/5789239/calculate-largest-rectangle-in-a-rotated-rectangle

0voto

Emanuele Paolini Puntos 14186

Sea $(\pm x,\pm y)$ son las coordenadas de los vértices de $P$ . El área de $P$ es $4xy$ . Al menos uno de los vértices de $P$ debe encontrarse en un borde de $R'$ (de lo contrario, puede aumentar $P$ por un escalar) y por lo tanto también el vértice opuesto está en la arista opuesta de $R'$ . Supongamos que $(x,y)$ está en un borde de $R'$ y supongamos que el borde de $R'$ está contenido en la línea $ax+by=c$ . Entonces, si $(x,y)$ es interna a la arista, se pueden aplicar los multiplicadores de Lagrange para encontrar que $(y,x)=\lambda(a,b)$ que junto con la condición $ax+by=c$ da las coordenadas del vértice: $$ \begin{cases} x = \frac{2c}{a}\\\\ y = \frac{2c}{b}\\ \end{cases} $$

Debe probar esta solución con ambos bordes de $R'$ y descartar la solución en la que los demás vértices estén fuera de $R'$ .

0voto

mdexch Puntos 21

Terminé usando esta implementación en JavaScript :

function getCropCoordinates(angleInRadians, imageDimensions) {
    var ang = angleInRadians;
    var img = imageDimensions;

    var quadrant = Math.floor(ang / (Math.PI / 2)) & 3;
    var sign_alpha = (quadrant & 1) === 0 ? ang : Math.PI - ang;
    var alpha = (sign_alpha % Math.PI + Math.PI) % Math.PI;

    var bb = {
        w: img.w * Math.cos(alpha) + img.h * Math.sin(alpha),
        h: img.w * Math.sin(alpha) + img.h * Math.cos(alpha)
    };

    var gamma = img.w < img.h ? Math.atan2(bb.w, bb.h) : Math.atan2(bb.h, bb.w);

    var delta = Math.PI - alpha - gamma;

    var length = img.w < img.h ? img.h : img.w;
    var d = length * Math.cos(alpha);
    var a = d * Math.sin(alpha) / Math.sin(delta);

    var y = a * Math.cos(gamma);
    var x = y * Math.tan(gamma);

    return {
        x: x,
        y: y,
        w: bb.w - 2 * x,
        h: bb.h - 2 * y
    };
}

Escribiría la deducción en LaTeX, pero no la deduje :)

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