1
我正在繪製基於給定行的多邊形。除了看起來多邊形相交的情況之外,我的邏輯運行良好。然而,它似乎不是100%一致的,根據我正在閱讀的內容也沒有意義。以下是使用相同代碼創建的兩張圖片。黃色的多邊形是我所關心的。幫我理解Java多邊形填充奇數
圖片:http://i31.tinypic.com/24cxxlf.png
我想每種情況下都像第一種情況(其中空區「包裹」由多邊形沒有填寫)工作。
BufferedImage drawingImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = drawingImage.createGraphics();
Polygon polygon = new Polygon(parsedPoints[0], parsedPoints[1], parsedPoints[0].length);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g.setColor(drawingColor);
g.fillPolygon(polygon);
float[] scales = {1f, 1f, 1f, 0.7f};
float[] offsets = new float[4];
RescaleOp rop = new RescaleOp(scales, offsets, null);
graphics.drawImage(drawingImage, rop, 0, 0);
graphics.setStroke(new BasicStroke(2));
graphics.setColor(drawingColor);
graphics.drawPolygon(polygon);
(我填充多邊形應用的重新調整,以獲得一些透明度填充,然後繪製邊框不透明度)
:
這些圖像由這個代碼生成根據用於Graphics.fillPolygon方法的Java文檔:
在多邊形內部的區域被定義 使用奇偶填充規則,也 被稱爲交替規則。
如果我理解正確,那麼在兩種情況下,包含在由粗多邊形「包裹」的區域內的像素將恰好交叉兩條路徑,因此它將被視爲多邊形「外部」。所以我的問題是:(a)我是否理解偶數填充規則和(b)在Java中有沒有辦法讓第二個圖像更像第一個圖像?
對此的任何想法將不勝感激。
謝謝。
@cHao - 好的,但似乎並沒有解決爲什麼第一個多邊形填充正確,第二個沒有。 如果我理解你在說什麼,我們正在看這樣的事情。對於給定的行(y座標),我們應該有以下幾點(請原諒我可憐的ascii藝術): ------ | | ----------- | | ------- 不是我不想填滿的區域仍然在一個甚至會被索引的區域? – MikeTheReader 2010-07-30 17:11:31
@ Dante617:不,它不是。就像我所提到的,規則是每個多邊形。 – cHao 2010-07-30 17:21:22
@cHao - 好吧,我想我明白你在說什麼。從本質上講,一旦它真的相交,我最終有兩個多邊形(在兩個「正方形」,一個在另一箇中)。當它填滿時,它最終填充兩次。內部廣場和外部廣場。這解釋了爲什麼內部比其他部分稍暗,因爲它被填充了兩次,而不僅僅是一次。當然,現在的問題是,我怎麼才能讓它按照我想要的方式行事。 – MikeTheReader 2010-07-30 17:33:00