【发布时间】:2012-12-27 07:24:27
【问题描述】:
这是相当概念性的,我希望有人能提供帮助。 我有一个脚本,当您在其中插入坐标(x,y,从 0 -> 800)时,它将返回 3 个单独范围内的预绘制坐标列表。
ie:我输入 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);
}
}
很简单。
现在,当我输入另一组坐标时,会创建另一个多维数组,我想检查两个(嗯,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) 我在正确的轨道上吗?
【问题讨论】:
-
似乎this guy's repos 中的一些可能有用,尤其是 es5-shim 和 Montage Collections。我敢肯定有人有一个array.intersect。
标签: javascript math iteration