2010-05-28 147 views
2

如果我有这样的QuadCurve(+ =节点):的Java2D:填一个凸起的圆形多边形(QuadCurves)

+   + 
\  ./ 
    +--⁻⁻ 

我填满它用Java 2D的结果是这样的:(x =彩色)

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

但我想要的颜色的另一面:

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

这个帅客通过在颜色曲线周围绘制一个矩形来编辑我想对另一侧着色,然后用背景颜色填充曲线。

但这是不够的,以填补圆润凸块(基于QuadCurves)多边形。在矩形的某些坐标的情况下(正如我使用的技巧所解释的)重叠其他多边形。这里有两个图像(绿色区域是我的多边形):

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

所以,问题很简单:“我怎样才能颜色曲线的形状建造?”
但答案不会简单,我认为...

任何意见将非常非常感激。
在此先感谢。

也许我会做的赏金这个问题,如果我没有得到一个答案

回答

2

选择已知的多边形内部的点。

知道“边界颜色”(在这种情况下,黑色)。

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

您可以根据需要进行调整以适应您的特定需求。

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

+0

这确实是一种可能的方式!但我在比赛中需要这个。所以,我想知道这是否足以让游戏速度达到每秒40帧。 – 2010-05-29 08:26:01

+0

请确保我会测试这个! – 2010-05-29 08:26:34

+1

Well Martijn,除非我在其中做出某种菜鸟错误(这可能是我没有广泛讨论的),它应该是O(n)所需要的像素数量,我不喜欢没想到你会比这更好。如果你将一系列颜色作为边界,可能会涉及更多。 。 。 。 。另一件需要牢记的就是为什么你这样做,如果也许有更好的方式去做事情。有没有办法预渲染这些曲线并从保存的图像中加载?像这样的优化是最好的! – corsiKa 2010-06-01 03:00:26