Как получить информацию о фигуре зная ее границы?
Я хочу преобразовать данные о фигуре в фигуру. Я не знаю как это сделать.
Нужно 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 шт):
Известные данные: 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
из приведённых там формул, но мне кажется, что нет - аспект входит в уравнения для параметрического угла, так что, вероятно, придётся использовать численное решение.