调整任意原点的矩形形状

时间:2013-11-09 09:55:52

标签: c++ math geometry shape shapes

我有一个名为Rectangle的类,它是一个2D形状,原点位于其中心。 Vec2ffloat二维向量。

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

我的问题是:如何在调整矩形大小的同时任意选择原点?我显然需要同时执行翻译和调整大小(考虑真实来源是矩形的中心),但我找不到适合每个任意原点的正确组合。

1 个答案:

答案 0 :(得分:0)

我建议使用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
}

我希望我很清楚