Это относительно просто, но немного сложно объяснить, поскольку вы не дали нам способ представления своего эллипса. Есть так много способов сделать это ..
В любом случае, общий принцип выглядит следующим образом: Вы не можете непосредственно рассчитать граничную рамку, выровненную по оси. Однако вы можете вычислить экстремумы эллипса по x и y как точки в 2D-пространстве.
Для этого достаточно взять уравнение x (t) = ellipse_equation (t) и y (t) = ellipse_equation (t). Получить первый производный от него и решить его для его корня. Поскольку мы имеем дело с эллипсами, которые основаны на тригонометрии, это просто. Вы должны получить уравнение, которое получает корни через atan, acos или asin.
Подсказка: чтобы проверить свой код, попробуйте его с необращенным эллипсом: вы должны получить корни в 0, Pi / 2, Pi и 3 * Pi / 2.
Сделайте это для каждой оси (x и y). Вы получите не более четырех корней (меньше, если ваш эллипс вырожден, например, один из радиусов равен нулю). Оцените положения у корней, и вы получите все крайние точки эллипса.
Теперь ты почти у цели. Получить граничную рамку эллипса так же просто, как сканировать эти четыре точки для xmin, xmax, ymin и ymax.
Кстати - если у вас возникли проблемы с нахождением уравнения вашего эллипса: постарайтесь свести его к случаю, когда у вас есть эллипс, ориентированный по оси, с центром, двумя радиусами и углом поворота вокруг центра.
Если вы сделаете это, уравнения станут:
// 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;