次の問題を解決する最善の方法を見つけるのに苦労しています。それらを解決する複数の方法を試しましたが、常にいくつかのコーナーケースに遭遇しています。
問題は次のとおりです。
- 閉じた多角形を形成する
List
座標 (x 点と y 点) があります。このリストは、点が時計回りに並べられた多角形を形成することが保証されています。 Set
上の座標からの座標 (x 点と y 点)が与えられますList
。- 上記のすべてのポイントを使用して形成される線の始点と終点を把握する必要があります
Set
。
私が抱えている問題は、「最適な」開始点と終了点を見つける方法がわからないことです。多くのシナリオでは、( のインデックスを使用してList
) 最初と最後のポイントを選択して開始点と終了点を形成できますが、必要以上に長い線になる可能性があります。
たとえば、次の多角形があるとします:
0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 0
そして、Set
線分に含まれる必要がある次の座標: 0, 7, 3
.
最小インデックスと最大インデックスが見つかると、 が得られるのでindex(0)
、有効なラインであるindex(7)
ライン を形成できます0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
が、必要以上に長くなります。最適な線分は です7 -> 0 -> 1 -> 2 -> 3
。
Set
最適な (すべての点を含む最短の) 線分を効率的に見つけるにはどうすればよいですか?
コンテキストについて: 私は、JTS ジオメトリを使用して形状を描画するアプリケーションに取り組んでいます。描画された形状は、ベジエ曲線を使用して平滑化され、「湾曲したエッジ」になります。(点をドロップして) 形状を描画した後、ユーザーは形状を編集できます。Set
影響を受ける領域のみを「滑らかにする」ことができるように、変更されたポイント (上記のフォーム) を使用して開始点と終了点を把握したいと考えています。