Java2D:填充凸圆形多边形(四边形曲线)

Java2D:填充凸圆形多边形(四边形曲线),java,shapes,curve,graphics2d,convex-polygon,Java,Shapes,Curve,Graphics2d,Convex Polygon,如果我有这样的四元曲线(+=节点): 我用Java2D填充它,结果是这样的:(x=colored) 但我想给另一面涂上颜色: + + x\ ./x xxx +--⁻⁻xx xxxxxxxxxxx 这通过在曲线周围绘制一个矩形来实现,该矩形采用我想要为另一侧着色的颜色,然后用背景色填充曲线 但这还不足以填充凸圆形(基于四元曲线)多边形。在某些情况下,矩形的坐标(如我使用的技巧中所解释的)与多边形的其他部分重叠。以下是两幅图像(绿色区域是我的多边形): 因此,问题很简单

如果我有这样的四元曲线(
+
=节点):

我用Java2D填充它,结果是这样的:(
x
=colored)

但我想给另一面涂上颜色:

+         +
x\      ./x
xxx +--⁻⁻xx
xxxxxxxxxxx
这通过在曲线周围绘制一个矩形来实现,该矩形采用我想要为另一侧着色的颜色,然后用背景色填充曲线

但这还不足以填充凸圆形(基于四元曲线)多边形。在某些情况下,矩形的坐标(如我使用的技巧中所解释的)与多边形的其他部分重叠。以下是两幅图像(绿色区域是我的多边形):

因此,问题很简单:
如何给曲线的形状着色 但答案并不简单,我想

任何建议都将不胜感激。
提前谢谢


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

选择一个已知位于多边形内部的点

知道“边界颜色”(在本例中为黑色)

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


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

这确实是一种可行的方法!但我在游戏中需要这个。所以,我想知道这是否足够快,以每秒40帧的速度渲染游戏。好吧,Martijn,除非我在这方面犯了某种新手错误(这是可能的,我没有详细讨论过),就需要着色的像素数而言,它应该是O(n),我认为你不会比它更好。如果你用一系列的颜色作为边界,可能会涉及更多的问题。另一件要记住的事情是你为什么这样做,如果有更好的方法做事情的话。是否有一种方法可以预渲染这些曲线并从保存的图像加载?这样的优化是最好的!
+xxxxxxxxx+
 \xxxxxx./
   +--⁻⁻
+         +
x\      ./x
xxx +--⁻⁻xx
xxxxxxxxxxx
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);
}