Я работаю с рисованием полигонов на основе данной строки. У меня есть логика, удающаяся хорошо кроме случаев, где кажется, что полигон пересекает себя. Однако это, кажется, не на 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:
Область в полигоне определяется с помощью ровно-нечетного правила заливки, также известного как переменное правило.
Если я понимаю, что правильно, то в обоих случаях пиксель, содержавший в области, "перенесенной" толстым полигоном, пересек бы точно два пути, таким образом, это рассмотрят "вне" полигона.
Таким образом, мои вопросы: (a) я понимающий, что ровно-нечетная заливка управляет и (b) там путь в Java, чтобы заставить второе изображение работать больше как первое?
Любые мысли об этом значительно ценились бы.
Спасибо.