我正在创建一个在 JavaFX 中有地图的工具。我必须在该地图上绘制一个现有的多边形,以便在其上为定位服务创建区域。然后我想点击地图上的某个地方,为这个多边形添加一个新角。现在,向多边形添加一个角并不难。当我用鼠标右键单击地图上的某个地方时,我想在那里创建一个新角。但我想在“正确”位置添加那个角,这意味着在最接近新角的现有角之前或之后,而不是在多边形的末端。此外,新的多边形不应穿过 esiting 多边形(参见本文末尾的图片)。
我使用毕达哥拉斯定理来找到最近的点,但我现在的问题是,我不想在这个最近的角落之前或之后添加那个角落。
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;
}
这应该是结果,老实说,我没有找到我想要的多边形是如何正确调用的。