Java2D: заполнить выпуклый скругленный многоугольник (QuadCurves) - PullRequest
2 голосов
/ 29 мая 2010

Если у меня есть QuadCurve, подобный этому (+ = узел):

+         +
 \      ./
   +--⁻⁻

И я заполняю его в Java 2D, результат примерно такой: (* ​​1005 * = цветной)

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

Но я хочу покрасить другую сторону:

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

Это удается, нарисовав прямоугольник вокруг кривой в цвете, который я хочу закрасить с другой стороны, а затем залейте кривую цветом фона.

Но этого недостаточно для заполнения выпуклого закругленного (основанного на QuadCurves) многоугольника. В случае некоторых координат для прямоугольников (как объяснено в уловке, которую я использовал) перекрывают другие части многоугольника. Вот два изображения (зеленая область - мой многоугольник):

альтернативный текст http://img204.imageshack.us/img204/7823/convexpolygon.png альтернативный текст http://img708.imageshack.us/img708/3669/convexpolygon2.png

Итак, вопрос прост: «Как я могу раскрасить построение кривых?»
Но ответ не будет простым, я думаю ...

Любой совет будет ОЧЕНЬ ОЧЕНЬ признателен.
Заранее спасибо.

Может быть, я собираюсь назначить награду за этот вопрос, если не получу ответа

1 Ответ

2 голосов
/ 29 мая 2010

Укажите точку, которая, как известно, находится внутри многоугольника.

Знайте «граничный цвет» (в данном случае черный).

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);
}

Вы можете адаптировать это по мере необходимости к вашим конкретным потребностям.

Это работает для любой заливки для полностью ограниченной формы. Вы также захотите включить специальные условия (например, края изображения).

...