JavaFX にマップがあるツールを作成しています。そのマップ上にロケーション サービス用のゾーンを作成するために、そのマップ上に既存のポリゴンを描画する必要があります。次に、マップ上のどこかをクリックして、このポリコンに新しいコーナーを追加します。さて、多角形に角を追加することはそれほど難しくありません。マウスの右ボタンでマップ上のどこかをクリックすると、そこに新しいコーナーを作成したいと思います。しかし、そのコーナーを「右」の位置に追加したいと思います。つまり、ポリゴンの端ではなく、新しいコーナーに最も近い既存のコーナーの前後を意味します。さらに、新しいポリゴンは既存のポリゴンを通り抜けてはなりません (この投稿の最後にある図を参照)。
ピタゴラスの定理を使用して最近接点を見つけましたが、今の問題は、この最も近いコーナーの前または後にそのコーナーを追加したくないということです。
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;
}
正直なところ、結果として必要なポリゴンがどのように正しく呼び出されるかわかりません。