2010-05-28 97 views
2

如果我有這樣的QuadCurve(+ =節點):的Java2D:填一個凸起的圓形多邊形(QuadCurves)

+   + 
\  ./ 
    +--⁻⁻ 

我填滿它用Java 2D的結果是這樣的:(x =彩色)

+xxxxxxxxx+ 
\xxxxxx./ 
    +--⁻⁻ 

但我想要的顏色的另一面:

+   + 
x\  ./x 
xxx +--⁻⁻xx 
xxxxxxxxxxx 

這個帥客通過在顏色曲線周圍繪製一個矩形來編輯我想對另一側着色,然後用背景顏色填充曲線。

但這是不夠的,以填補圓潤凸塊(基於QuadCurves)多邊形。在矩形的某些座標的情況下(正如我使用的技巧所解釋的)重疊其他多邊形。這裏有兩個圖像(綠色區域是我的多邊形):

alt text http://img204.imageshack.us/img204/7823/convexpolygon.pngalt text http://img708.imageshack.us/img708/3669/convexpolygon2.png

所以,問題很簡單:「我怎樣才能顏色曲線的形狀建造?」
但答案不會簡單,我認爲...

任何意見將非常非常感激。
在此先感謝。

也許我會做的賞金這個問題,如果我沒有得到一個答案

回答

2

選擇已知的多邊形內部的點。

知道「邊界顏色」(在這種情況下,黑色)。

recurrsiveFill(Pixel p, Color fill, Color bound) { 
    p.setColor(fill); 
    if(p.left.color != bound && p.left.color != fill) 
     recurrsiveFill(p.left , fill, bound); 
    if(p.right.color != bound && p.right.color != fill) 
     recurrsiveFill(p.right, fill, bound); 
    if(p.up.color != boun d&& p.up.color != fill) 
     recurrsiveFill(p.up, fill, bound); 
    if(p.down.color != bound && p.down.color != fill) 
     recurrsiveFill(p.down, fill, bound); 
} 

您可以根據需要進行調整以適應您的特定需求。

這適用於任何填充完全有界的形狀。您還需要包含特殊條件(例如圖片的邊緣)。

+0

這確實是一種可能的方式!但我在比賽中需要這個。所以,我想知道這是否足以讓遊戲速度達到每秒40幀。 – 2010-05-29 08:26:01

+0

請確保我會測試這個! – 2010-05-29 08:26:34

+1

Well Martijn,除非我在其中做出某種菜鳥錯誤(這可能是我沒有廣泛討論的),它應該是O(n)所需要的像素數量,我不喜歡沒想到你會比這更好。如果你將一系列顏色作爲邊界,可能會涉及更多。 。 。 。 。另一件需要牢記的就是爲什麼你這樣做,如果也許有更好的方式去做事情。有沒有辦法預渲染這些曲線並從保存的圖像中加載?像這樣的優化是最好的! – corsiKa 2010-06-01 03:00:26