I'm creating a tool where I have a map in JavaFX. I have to draw a existing polygon on that map in order to create zones on it for a location service. Then I want to click somewhere on the map to add a new corner to this polycon. Now, adding a corner to a polygon is not that hard. When I click somewhere on the map with the right mouse button I want to create a new corner there. But I want to add that corner in the "right" position, meaning before or after that existing corner that is nearest to the new one, not at the end of the polygon. Furthermore the new polygone should not cut thru the esiting polygone (see pict at the end of this post).
I used the theorem of Pythagoras to find the nearest point, but my problem now is, that I don't want if to add that corner BEFORE or AFTER this nearest corner.
Polygon poly = new Polygon(...); //javaFX
private void insertPoint(double x, double y)
{
int positionInPolygon = 0;
double minDistance = Double.MAX_VALUE;
//find that point in the existing polygon that is nearest to the new one
for ( int i = 0; i <= poly.getPoints().size()-1; i += 2 )
{
double cornerA_x = poly.getPoints().get(i);
double cornerA_y = poly.getPoints().get(i+1);
double tmpDistance = distance(x, y, cornerA_x, cornerA_y);
if(minDistance > tmpDistance)
{
minDistance = tmpDistance;
positionInPolygon = i;
}
}
//Now I have the nearest point in the polygon
//But I don't know if I have to insert that new point BEFORE or AFTER the existing one.
...
}
private double distance(double x1, double y1, double x2, double y2)
{
double result = 0;
result = Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
return result;
}
This should be the result, to be honest I dindn't find how the polygone that I want as a result is called correctly.