Esto es relativamente sencillo, pero un poco difícil de explicar, ya que no nos ha dado la forma de representar a su elipse. Hay tantas maneras de hacerlo ...
De todos modos, el principio general es el siguiente: No se puede calcular directamente el cuadro de límite alineado al eje. Sin embargo, puede calcular los extremos de la elipse en x e y como puntos en el espacio 2D.
Para esto es suficiente tomar la ecuación x (t) = elipse_equation (t) y y (t) = ellipse_equation (t). Obtén la derivada de primer orden y resuélvela por su raíz. Ya que estamos lidiando con elipses que se basan en la trigonometría, es sencillo. Deberías terminar con una ecuación que obtiene las raíces a través de atan, acos o asin.
Sugerencia: Para comprobar el código, inténtelo con una elipse no girada: debe obtener raíces en 0, Pi/2, Pi y 3 * Pi/2.
Haga eso para cada eje (x e y). Obtendrá como máximo cuatro raíces (menos si su elipse está degenerada, por ejemplo, uno de los radios es cero). Evalúa las posiciones en las raíces y obtienes todos los puntos extremos de la elipse.
Ya casi está allí. Obtener el cuadro de límite de la elipse es tan simple como escanear estos cuatro puntos para xmin, xmax, ymin e ymax.
BTW: si tiene problemas para encontrar la ecuación de su elipse, intente reducirla al caso en que tenga una elipse alineada con el eje con un centro, dos radios y un ángulo de rotación alrededor del centro.
Si lo hace las ecuaciones se convierten en:
// the ellipse unrotated:
temp_x (t) = radius.x * cos(t);
temp_y (t) = radius.y = sin(t);
// the ellipse with rotation applied:
x(t) = temp_x(t) * cos(angle) - temp_y(t) * sin(angle) + center.x;
y(t) = temp_x(t) * sin(angle) + temp_y(t) * cos(angle) + center.y;
Gracias. Eso funciona, excepto que tienes un error tipográfico en la ecuación dos. El signo menos debe ser un plus. –
Solucionado, parece que seguí la solución para tan (t) en [2] también, así que lo arreglé también. Esperemos que hayas visto todos mis errores, todo está garabateado en el reverso de un sobre aquí ...;) –
Creo que hay otro error, en el ejemplo: el primer valor t para x es -0.4636, el segundo no debería ser -3.6052 (es igual a -0.4636 - pi)? – brianmearns