У меня есть класс с именем Rectangle
, который является 2D-формой, с началом координат в его центре.
Vec2f
это float
двумерный вектор.
struct Rectangle {
Vec2f position, halfSize;
float getTop() { return position.y - halfSize.y; }
float getBottom() { return position.y + halfSize.y; }
// ... getLeft(), getRight(), ...
void setWidth(float mWidth) { halfSize.x = mWidth / 2.f; }
// ... setHeight(), setHalfWidth(), ...
};
Изменение размера формы с Rectangle::setWidth
очевидно, поддерживает происхождение в центре. Однако мне нужно произвольно изменить размер прямоугольника с разных точек. Пример: Я хочу изменить размер прямоугольника из нижнего правого угла, используя верхний левый угол в качестве его источника.
Идеальный API был бы примерно таким:
Rectangle rect;
rect.resizeFrom(rect.getTopLeft(), Vec2f{150.f, 45.f});
// ^ new origin ^ new size
Мой вопрос: Как я могу произвольно выбрать источник при изменении размера прямоугольника? Я, очевидно, должен выполнить как перевод, так и изменение размера (учитывая реальный origin — центр прямоугольника), но я не могу найти правильную комбинацию, которая работает с любым произвольным источником.
Я рекомендую использовать OpenGL,
В любом случае моя рекомендация будет,
resizeFrom(FROM, Vec2f){
resize in the normal way
getTop(), getBottom(), etc.. //get all new corner positions
Difference = FROM-newLeftCorner
Move all corner positions according to the Difference
commit
}
Я надеюсь, что я ясно
Других решений пока нет …