我想用扫描线算法填充一个多边形。为此,我必须知道扫描线与多边形接触的所有点。我为此写了一个循环,但它显然不起作用(它从不在列表中添加一个点,这意味着它找不到任何切割多边形的点)我可以创建一个多边形并从中获取所有边。
这是我的代码,用于获取与多边形相交的扫描线点 xmin、xmax、ymin 和 ymax 是多边形的最大点。他们也是正确的。contains() 使用 java.awt.Polygon 类检查 Point 是否在多边形内。这也有效。wasInside 包含一个布尔值,如果最后检查的点是否在多边形内,它会保存旧状态。
boolean wasInside = false;
ArrayList<Point> intersectionPoints = new ArrayList<Point>();
for (int yTemp = ymin; yTemp <= ymax; yTemp++) {
for (int xTemp = xmin; xTemp <= xmax; xTemp++) {
if (wasInside != this.contains(new Point(xTemp, yTemp))) {
intersectionPoints.add(new Point(xTemp, yTemp));
wasInside = !wasInside;
}
}
}