5

ユーザーが好きな形の輪郭を描くことができる地図を作ろうとしています。しかし、ユーザーがポリゴンの線を交差させるポイントを選択し、含めたい領域を除外できるという問題が発生しています。

私が話していることを確認するには、このページに移動して次の手順を実行してください。

  1. 4点をクリックして、ボックスの4つの角を作成します
  2. ボックスの境界をさらに定義するには、作成した4つのポイントのそれぞれの間をクリックします。
  3. クリック完了

次のように表示されます。

代替テキスト

この問題を解決する簡単な方法はありますか、それとも基本的にここで「巡回セールスマン」タイプの状況に対処していますか?すべてのロジックはjavascriptで行われるため、私がこれをどのように行っているかを確認したい場合は、「ソースを表示」してください。

4

3 に答える 3

2

凸包には、ユーザーが除外したい領域が含まれる場合があります。これにアプローチする別の方法があり、より満足のいく結果が得られる可能性があります。各行をチェックして、どの行が交差するかを確認します(これを行う方法はたくさんあります)。次に、これら2つの線の間に表示されるポイントのサブシーケンスを逆にします。

たとえば、BCとEFが交差するポイントABCDEFAが与えられたとします。サブシーケンスC..Eを逆にして、ABEDCFAを生成することにより、それらの交差を解除できます。

とにかくやってみるものです。

于 2010-03-03T20:46:29.920 に答える
2

凸包ではありません。

これらの2本の線が交差する場所の近くにある「リンフィールドオークス」に立ち寄ったと想像してみてください。凸包はこれをスキップして「国際」と「82」の間に直線を引きます

あなたがしようとしているのは、それぞれの新しいポイントが既存のポイントによって形成されたポリゴンの内側にあるかどうかを判断することです-そうであれば、最も近いポリゴンの辺を壊して、そのエッジに新しいポイントを挿入する必要があります。ポイントインポリゴンテストについては、 http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htmを参照してください。

于 2010-03-03T21:24:49.080 に答える
1

私は過去に同様の問題を解決し、ジェフリーがユーザーがどのような形を期待しているのか正確にわからないと述べた問題に遭遇しました。私は、ユーザーに新しいポイントの間にある2つのポイントを選択するように要求することで、その問題を解決することになりました。より多くのクリック(3対1)が必要ですが、ユーザーは必要な形状を完全に制御できます。興味があれば、どこかで使用したコード(Googleマップ用)がまだあるかもしれません。

于 2010-03-03T21:20:07.800 に答える