Javascript。棘手的 : Are all array values consistent?(即 : does a = [a, a,a,a])适用于任何大小的数组

标签 javascript math iteration

这是相当概念性的,我希望有人能提供帮助。 我有一个脚本,当您向其中插入坐标(x,y,从 0 -> 800)时,它会返回 3 个独立范围内的预先绘制的坐标列表。

即:我输入 200,200。我收到以下各项的列表:半径为 25、半径为 60、半径为 150 的地 block 。

代码如果你好奇/上下文:

        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);
        }
    }

很简单。

现在,当我输入另一组坐标时,会创建另一个多维数组,我想检查两个(好吧,6 个)圆内的交点。

我想到了使用数组进行检查。如果输入 2 个坐标,并且在两个内部(绿色)圆圈内找到一个点,则 a = [g,g]。 如果一个点位于一个点的内部,但位于另一个点的中间(蓝色),则设置 a = [g,b] 你明白了。红色是外圈。

当输入 3 个坐标时,事情会变得更加棘手。假设一个点在两个内部和一个中间。那么 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) 我在正确的轨道上吗?

最佳答案

与其将出现在圆圈内的事件作为数组中的一项,不如计算长度与圆圈数相同的数组中出现的次数。 IE。代替 [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 个数据坐标,数组 [4,2,7] 将获得值 427,可以很容易地将它与数组 [3,5,0] 将获得值 350。

您可以将数组计算为:

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;
});

关于Javascript。棘手的 : Are all array values consistent?(即 : does a = [a, a,a,a])适用于任何大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14299737/

相关文章:

java - 为什么这个减法不等于零?

algorithm - 无向无权图中的最长路径

JavaScript 无法在 IE、.data 中运行?设置间隔?

javascript - javascript函数之间的循环引用

javascript - 写一个计数器来计算点击次数

jQuery并发编码问题(同步jQuery)

java - 通过迭代改变集合

javascript - 加载 Ace 导致未捕获错误 : Mismatched anonymous define() module:

algorithm - 是否有生成序列所有排列的递归算法的证明?

java - 迭代 vector 中的元素,以循环方式从最后一个元素环绕到第一个元素