I want to fill a polygon with the scanline algorith. for this I have to know all points where the scanline comes in contact with the polygon. I wrote a loop for this, but its obviously not working (it never adds a point to the list which means it can't find any points which cuts the polygon) I can create a Polygon and have all Edges from it.
Here is my code for getting the points of the scanline which intersect the polygon xmin, xmax, ymin and ymax are the max points from the polygon. They are also correct. contains() checks, if a Point is inside the polygon, with using the java.awt.Polygon class. This is working too. wasInside contains a boolean, which saves the old state, if the last point checked was inside the polygon or not.
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;
}
}
}
I have run your code in a minimal frame. It works, there is nothing wrong with it.
I suggest you check these pitfalls:
Polygon.contains()
checks literally if a point is inside. So e.g. if your polygon is a rectangle starting at point (10, 10), thencontains(10, 10)
will return false. Onlycontains(11, 11)
will return true. So you are not finding the real intersection points, but the first (and last) points inside.intersectionPoints
? This should work:System.out.println("Nb of intersection points found: " + intersectionPoints.size());
After this, it should work for you. You might want to print out what is checked for better understanding: