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