Изменить размер прямоугольника в произвольном начале

У меня есть класс с именем 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 — центр прямоугольника), но я не могу найти правильную комбинацию, которая работает с любым произвольным источником.

1

Решение

Я рекомендую использовать 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
}

Я надеюсь, что я ясно

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]