Java2D:填充凸圆角多边形(QuadCurves)

时间:2010-05-28 20:41:27

标签: java shapes curve graphics2d convex-polygon

如果我有这样的QuadCurve(+ = node):

+         +
 \      ./
   +--⁻⁻

我在Java 2D中填写结果是这样的:(x =有色)

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

但我想为另一方着色:

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

通过在曲线周围绘制一个矩形,我希望为另一面着色,然后用背景颜色填充曲线。

但这不足以填充凸圆角(基于QuadCurves)多边形。如果矩形的某些坐标(如我使用的技巧中所述)重叠多边形的其他部分。这是两个图像(绿色区域是我的多边形):

alt text http://img204.imageshack.us/img204/7823/convexpolygon.png alt text http://img708.imageshack.us/img708/3669/convexpolygon2.png

所以,问题很简单:“我如何为曲线的形状构建着色?”

但我认为答案并不简单......

任何建议都非常值得赞赏 提前谢谢。

如果我没有得到答案,也许我会为这个问题提供赏金

1 个答案:

答案 0 :(得分:2)

选择一个已知在Polygon内的点。

了解“边界颜色”(在本例中为黑色)。

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

您可以根据自己的特定需求进行调整。

这适用于任何填充完全有界的形状。您还需要合并特殊条件(例如图片的边缘)。