2013-11-09 71 views
1

我有一個名爲Rectangle的類,它是一個二維形狀,原點位於其中心。 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 

我的問題是:我怎麼能任意選擇一個原點,而調整的矩形?我顯然需要執行翻譯和調整大小(考慮實際原點是矩形的中心),但我無法找到適用於每個任意原點的正確組合。

回答

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 
} 

我希望我清楚

+0

@vit工作的呢? – Esqarrouth

+0

它似乎工作,但它並沒有解決我原來的問題:我想從底部調整一個矩形*(想想快門)*:頂部的Y座標應該保持不變,而應該改變的只是底部Y座標。 –

+0

要做到這一點,你可能需要一個完整的重組,其中不可能說沒有看到完整的代碼說。 如果在所有計算完成之前未顯示新矩形,則執行此操作的方式可能無關緊要 – Esqarrouth