1

という名前のクラスが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

私の質問は、長方形のサイズを変更するときに原点を任意に選択するにはどうすればよいですか? 明らかに、変換とサイズ変更の両方を実行する必要があります (実際の原点が長方形の中心であることを考慮すると) が、すべての任意の原点で機能する正しい組み合わせを見つけることができません。

4

1 に答える 1

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
}

私は明確であることを願っています

于 2013-11-09T10:05:24.170 に答える