【问题标题】:Java2D: Fill a convex rounded polygon (QuadCurves)Java2D:填充凸圆角多边形(QuadCurves)
【发布时间】:2010-05-28 20:41:26
【问题描述】:

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

+         +
 \      ./
   +--⁻⁻

我用 Java 2D 填充它,结果是这样的:(x = coloured)

+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

所以,问题很简单:“如何为曲线的形状构建着色?”
但我认为答案并不简单......

非常感谢任何建议。
提前致谢。

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

【问题讨论】:

    标签: java shapes curve graphics2d convex-polygon


    【解决方案1】:

    选择一个已知在多边形内的点。

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

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

    您可以根据需要对其进行调整以满足您的特定需求。

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

    【讨论】:

    • 这确实是一种可能的方式!但我在游戏中需要这个。所以,我想知道这是否足够快以每秒 40 帧的速度渲染游戏。
    • 好吧 Martijn,除非我在其中犯了某种菜鸟错误(这是可能的,我没有深入研究它),就你的像素数而言,它应该是 O(n)需要上色,我认为你不会比这更好。如果您将一系列颜色作为边界,则可能会涉及更多内容。 . . . .要记住的另一件事是您为什么要这样做,以及是否有更好的方法来做事。有没有办法可以预渲染这些曲线并从保存的图像中加载?这样的优化是最好的!
    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2016-06-08
    • 2014-10-14
    • 2015-08-17
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多