我正在根据给定的线绘制多边形。我有很好的逻辑计算,除非在一些情况下,它似乎是多边形相交本身。然而,它似乎不是100%一致的,也没有意义的基础上,我的阅读。下面是使用相同代码创建的两个图像。黄色的多边形是我关心的。
图像:
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);
(我正在填充多边形,应用重缩放以获得填充的透明度,然后绘制不带透明度的边框。)
根据JavaDig.FieldOrthon方法的Java文档:
定义多边形内的区域
也可以使用偶数奇数填充规则
被称为交替法则。
如果我理解正确,那么在这两种情况下,包含在被厚多边形“包裹”的区域内的像素将正好穿过两条路径,因此它将被视为多边形的“外部”。
因此,我的问题是:(a)我是否理解偶数填充规则,(b)在Java中有没有办法使第二个图像更像第一个?
对此有任何想法都将不胜感激。
谢谢。