Я просмотрел некоторые другие близкие ответы здесь, но не могу найти решения моей проблемы.
У меня есть многоугольник, который вращается вокруг позиции оси, и мне нужно найтиограничительная рамка многоугольника.По сути, ограничивающий прямоугольник должен иметь позицию x
и y
в верхнем левом углу и width
и height
самого прямоугольника.Я могу вычислить прямоугольник многоугольника без вращения, используя этот код, но он не учитывает и вращение.Красный квадрат - это текущий ограничивающий прямоугольник без вращения, зеленый круг - это ось вращения, а многоугольник - сам многоугольник.
В идеале,Я не хочу пересчитывать каждую позицию вершины в каждом вызове, чтобы получить ограничивающий прямоугольник, я хочу, чтобы это было в самой математике.Вот пример многоугольника и ограничивающего прямоугольника без вращения: https://i.imgur.com/MSOM9Q1.mp4
Вот мой текущий код для нахождения ограничивающего прямоугольника для не повернутого многоугольника:
const minX = Math.min(...this.vertices.map((vertex) => vertex.x));
const minY = Math.min(...this.vertices.map((vertex) => vertex.y));
return {
x: minX + this.position.x,
y: minY + this.position.y,
width: Math.max(...this.vertices.map((vertex) => vertex.x)) - minX,
height: Math.max(...this.vertices.map((vertex) => vertex.y)) - minY
};
Структура объекта многоугольника:
- *
position
- центр многоугольника - *
rotationAxis
- вектор относительноцентр многоугольника (позиция) - Массив
vertices
представляет собой список векторов относительно центра многоугольника
Структура ограничительной рамки:
Что мне нужно сделать, чтобы вычислить ограничивающую рамку повернутого многоугольника?