ユーザーがキャンバスをクリックして無限のドットをドロップする Javascript Web アプリケーションを作成しようとしています。解決ボタンがあり、クリックするとドット間に線が描画され、すべてのドットが正確に 2 つの他のドットで接続され、線が交差することはありません。これまでのコードでは、線がまだ交差している特定のインスタンスがあり、線が交差することなくすべてのドットを接続するロジックをプログラムで把握することはできません。
これまでのところ、すべてのポイント (XY 座標) を収集し、オブジェクトの JavaScript 配列に配置しました。次に、正しい順序で描画されるように配列を並べ替える必要があります。この時点で、注文が常に要件を満たしているとは限らないことを除いて、すべてが機能します。
私の質問: すべてのシナリオで機能するように、これらのポイント (XY 座標) をすべて接続するが決して交差しないように順序付けする一連のルールについてアイデアを持っている人はいますか?
ご協力いただきありがとうございます。
var centroid = get_polygon_centroid($points);
$points = _.sortBy($points, function(p){
var dx = p.coords.x-centroid.x;
var dy = p.coords.y-centroid.y;
return dx*dx + dy*dy;
});
$points = _.sortBy($points, function(p){
var dx = p.coords.x-centroid.x;
var dy = p.coords.y-centroid.y;
return Math.atan2(dy, dx);
});
$points.push($points[0]);