您可以將每個矩形的對象只與兩個長度屬性組合,即長度和寬度。
它們之間的間隔越少越好,也就是離它們的區域越近效果越好!
但是,關鍵點在於這個結合過程。長度越接近,它們的邊緣就會重疊得越多,但這似乎很難。如果屬性圖形有相應的算法,有空回頭看看!
_______________________________________________________________
還應該給rectangle: direction添加壹個屬性,就是讓它水平放置或者垂直放置。至於斜置,就不用考慮了!
算法:
1)可以找到有等邊條件的矩形,先把這些矩形拼接成壹個矩形,
然後找出矩形中有壹條矩形邊等於幾條矩形邊之和,將這些矩形拼接在壹起(但這可能不是最優的)。最後找那些邊很近的拼接就知道沒有新的矩形了!但是數學基礎不夠,沒有辦法正式證明最小值。
2)另外,可以采用窮舉法(N不大時適用),完全可以實現,即組合排列(包括相對位置和方向(兩個旋轉方向)的完全排列),例如N=2時,它們的相對位置有四種有效組合。計算每壹種可能性,取最小的壹種為OK!
但是,這種算法的效率相對較低。當然很多都是重復的,算法是可以優化的!
總結:以上都是邊思考邊寫的,很隨意。但是第二種算法肯定是可行的,但是需要優化。數學知識不夠,只能到這裏了。至於實現,很容易,只要算法好。看在時間的份上就此打住吧!~但是妳的題目挺有意思的!如果有人有好的算法,在預期中...