3

これはかなり概念的なものであり、誰かが助けてくれることを願っています。座標 (x、y、0 -> 800 から) を挿入すると、3 つの別々の範囲内にある事前にプロットされた座標のリストが返されるというスクリプトがあります。

例: 200,200 と入力します。次のそれぞれのリストを受け取ります: 半径 25 以内、半径 60 以内、半径 150 以内のプロット。

興味がある場合のコード/コンテキスト:

        display(coords[n][1] + ", " + coords[n][2]);

    if(n==0){

    for(var i=0; i < data.length; i++) {
        var xs = 0;
        var xy = 0;
        xs = xPlot - data[i][0];
        ys = yPlot - data[i][1];
        xs = xs * xs;
        ys = ys * ys;

        distance = Math.sqrt(xs + ys);

        if (distance <= 25){
            display2(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
        else if(distance <= 60){
            display3(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
        else if(distance <= 150){
            display4(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
    }

簡単です。

ここで、別の座標セットを入力すると、別の多次元配列が作成され、2 つ (まあ、6 つ) の円内の交点をチェックしたいと思います。

チェックに配列を使用することを考えました。2 つの座標が入力され、点が両方の内側 (緑) の円内にある場合、a = [g,g]。ポイントが一方の内側にあるが、他方の中央 (青) にある場合は、a = [g,b] を設定します。赤は外側の円です。

3 つの座標が入力されると、さらに複雑になります。ポイントが2つの内側と1つの中間にあるとしましょう。次に、a = [g、g、b]。3 つのリストの目的は、返された値を最良のグループから最悪のグループに編成することです。したがって、4 つの入力がある例では、リストは次のように編成されます。

リスト 1 / リスト 2 / リスト 3
gggg / gggb / bbbr
------- / ggbb / bbrr
------- / gbbb / brrr
------- / bbbb / rrrr

スケーラブルな方法で配列をチェックするにはどうすればよいですか?5 つの入力がある場合、結果を適切な列に配置できますか?

私はこのソファから始めました:

else if(n>0){

    for(var i=0; i < data.length; i++) {
        for(var j=0; j < coords.length; j++) {
            var xs = 0;
            var ys = 0;
            xs = coords[j][1] - data[i][0];
            ys = coords[j][2] - data[i][1];
            xs = xs * xs;
            ys = ys * ys;
            distance = Math.sqrt(xs + ys);

            if (distance <= 25){
                a[j] = [,[g]];
                }
            else if (distance <= 60){
                a[j] = [,[b]];
                }
            else if (distance <= 150){
                a[j] = [,[r]];
                }
        }
        if($.inArray('g', a) && (!($.inArray('b', a)))){
            display2(data[i][0] + ", " + data[i][1] + " - " + alliance);

}

a に g が含まれていて b が含まれていない場合、この最後の行は実行されますか?? (jquery) 私は正しい軌道に乗っていますか?

4

2 に答える 2

3

円内の出現をアイテムとして配列に入れる代わりに、円の数と同じ長さの配列で出現の数を数えます。すなわち の代わりに[g,g,g,g,b,b,r,r,r,r,r,r,r]、 を使用します[4,2,7]。そうすれば、アイテムを追加するときに配列をソートしたままにする必要はなく、正しいアイテムをインクリメントするだけです。

これにより、関連性に基づいて結果を簡単に並べ替えることができます。配列の数値は、基数がデータ座標の数と同じである数値として見ることで作成できます。すなわち:

var n = arr[0] * data.length * data.length + arr[1] * data.length + arr[2];

データ座標が 10 の場合、配列は値 427を取得し、値 350 を取得する[4,2,7]配列と簡単に比較できます。[3,5,0]

配列は次のように計算できます。

for(var i=0; i < coords.length; i++) {
  var arr = [0, 0, 0];
  for(var j=0; j < data.length; j++) {
    var xs = coords[i][1] - data[j][0];
    var ys = coords[i][2] - data[j][1];
    distance = Math.sqrt(xs * xs + ys * ys);
    if (distance <= 25) {
      arr[0]++;
    } else if (distance <= 60) {
      arr[1]++;
    } else if (distance <= 150) {
      arr[2]++;
    }
  }
  coords[i].arr = arr;
  coords[i].value = arr[0] * data.length * data.length + arr[1] * data.length + arr[2];
}

これで、値の座標を並べ替えることができます。

coords.sort(function(a, b){
  return a.value - b.value;
});
于 2013-01-13T01:46:42.980 に答える
0

これが私が思いついた解決策です。適切な場所にある座標を表示しながら、まさに私が必要とすることを行います。

http://pastehtml.com/view/cowibn4bs.html私の労働の成果を見るために。

if(n==0){

    for(var i=0; i < data.length; i++) {
        var xs = 0;
        var xy = 0;
        xs = xPlot - data[i][0];
        ys = yPlot - data[i][1];
        xs = xs * xs;
        ys = ys * ys;

        distance = Math.sqrt(xs + ys);

        if (distance <= 25){
            display2(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
        else if(distance <= 60){
            display3(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
        else if(distance <= 150){
            display4(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
    }
    }

    else if(n>0){

    $('#msgs2').html('');
    $('#msgs3').html('');
    $('#msgs4').html('');


    for(var i=0; i < data.length; i++) {
        a = [];
        for(var j=0; j < coords.length; j++) {
            var xs = 0;
            var ys = 0;
            xs = coords[j][1] - data[i][0];
            ys = coords[j][2] - data[i][1];
            xs = xs * xs;
            ys = ys * ys;
            distance = Math.sqrt(xs + ys);

            if (distance <= 25){
                a[j] = 'g';
                }
            else if (distance <= 60){
                a[j] = 'b';
                }
            else if (distance <= 150){
                a[j] = 'r';
                }
            else{
                a[j] = 0;
            }

        }
        if($.inArray(0, a) > -1){
        }
        else if($.inArray("g", a) > -1 && $.inArray("b", a) === -1){
            if($.inArray("r", a) === -1){
                display2(data[i][0] + ", " + data[i][1] + " - " + alliance);
            }
        }
        else if($.inArray("b", a) > -1 && $.inArray("r", a) === -1){
            display3(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
        else if($.inArray("r", a) > -1){
            display4(data[i][0] + ", " + data[i][1] + " - " + alliance);
        }
    }               

    }
    n++;
于 2013-01-13T03:22:58.330 に答える