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