Я работаю с рисованием полигонов на основе заданной линии. У меня хорошо работает логика, за исключением случаев, когда кажется, что многоугольник пересекает себя. Тем не менее, он не выглядит на 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);
(Я заполняю многоугольник, применяя масштабирование, чтобы придать прозрачности заливку, а затем рисую границу без прозрачности.)
В соответствии с документацией Java для метода Graphics.fillPolygon:
Площадь внутри многоугольника определена
используя четно-нечетное правило заполнения, также
известный как переменное правило.
Если я правильно понимаю, то в обоих случаях пиксель, содержащийся в области, «обернутой» толстым многоугольником, будет пересекать ровно два пути, поэтому он будет считаться «вне» многоугольника.
Итак, мои вопросы таковы: (а) я понимаю правило четно-нечетного заполнения и (б) есть ли способ в Java заставить второе изображение работать как первое?
Будем весьма благодарны за любые мысли по этому поводу.
Спасибо.