我有一个名为 的类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
我的问题是:如何在调整矩形大小时任意选择原点?我显然需要同时执行平移和调整大小(考虑到真正的原点是矩形的中心),但我找不到适用于每个任意原点的正确组合。