Как получить информацию о фигуре зная ее границы?

Я хочу преобразовать данные о фигуре в фигуру. Я не знаю как это сделать. Нужно xMin, yMin, xMax, yMax, rotation преобразовать в x, y, xSize, ySize, rotation

int xMin = data[0];
int yMin = data[1];
int xMax = data[2];
int yMax = data[3];
x = (xMin + xMax) / 2;
y = (yMin + yMax) / 2;
rotation = data[4];

введите сюда описание изображения


Ответы (1 шт):

Автор решения: MBo

Известные данные: axis-aligned ограничивающий прямоугольник с размерами W, H, угол вращения Fi

введите сюда описание изображения

Требуется найти размеры повернутого прямоугольника, обозначим их w и h (сокращённый перевод моего ответа на EnSO)

Из чертежа видно:

H = w * Abs(Sin(Fi)) + h * Abs(Cos(Fi))
W = w * Abs(Cos(Fi)) + h * Abs(Sin(Fi))

пусть

as = Abs(Sin(Fi))
cs = Abs(Cos(Fi))

тогда мы можем решить систему линейных уравнений и получить (если угол не равен Pi/4)

h = (H * cs - W * as) / (cs^2 - as^2)
w = -(H * as - W * cs) / (cs^2 - as^2)

(с точностью до обмена w/h для углов Fi и Fi+-Pi/2)


По эллипсу - у меня есть решение прямой задачи на EnSO, можете попробовать, получится ли аналогично решить вашу (обратную) задачу получения a,b из приведённых там формул, но мне кажется, что нет - аспект входит в уравнения для параметрического угла, так что, вероятно, придётся использовать численное решение.

→ Ссылка