一般来说,要了解多边形填充,您必须了解边缘方向、缠绕顺序和选定的多边形填充规则。
边方向由声明顶点的顺序决定。例如 ...
Polygon poly= new Polygon();
poly.addPoint(10, 10);
poly.addPoint(100, 10);
poly.addPoint(100, 100);
poly.addPoint(10, 100);
多边形是通过连接相邻的顶点(从一个有序的顶点列表中)形成的边来绘制的。列表中的最后一个顶点也加入第一个顶点(好像列表是圆形的)。上面多边形中的第一条边由前两个顶点构成——Point(10,10) 和 Point(100,10)。
每当多边形自相交或重叠时,要了解如何绘制多边形,您需要了解缠绕顺序和应用的多边形填充规则。当多边形重叠时,会创建多边形子区域 - 由边缘包围的离散区域。这些子区域的缠绕顺序和应用的多边形填充规则决定了这些子区域是否被填充。
(来源:angusj.com)
任何给定多边形子区域的绕组数可以通过以下方式得出:
- 将绕组计数设置为零
- 从给定子区域内的一个点 (P1),画一条假想的水平线到一个或多个多边形 (P2) 之外的另一个点
- 在从 P1 到 P2 遍历这条线时,对于穿过这条假想线的每个多边形边缘 - 如果它朝上,则增加绕组计数,否则减少绕组计数。
根据 Java Graphics2D文档,fillPolygon仅使用奇偶填充规则,其中仅填充奇数子区域。
(来源:angusj.com)