我会尽可能清楚地询问,但如果您不清楚某些部分,请发表评论。
我正在尝试开发一个公式,以根据序列中该元素的值来确定元素的位置。更具体地说,我使用JavaScript将这种性质的字符串:c-c c-c-c c
分成一个数组,并使用 2i 的间隔迭代该数组以提取 c 价值观。例如,假设我的字符串与之前发布的一样(长度为6 c)。我希望以下面的方式放置这些 c 值,其中数字指的是我的循环中 i 的值(我添加了额外的0以使其对称,因为10):
00 ## 02
##
06 ## 04
##
08 ## 10
我正在尝试使用 i 的值找到一个模式/公式,这将导致上述定位。为简单起见,我们假设x,y坐标系使00
处的 c 值的位置为(0,0),02
为(1,0) ),04
是(1,1),06
是(0,1),08
是(0,2),10
是(1,2)
任何人都可以帮助开发模式/公式/算法来确定使用 i 值的定位吗?我试图不必写(在这个例子中)六个不同的if语句。
答案 0 :(得分:2)
使用x,y坐标系:
y = Math.floor(i / 2);
x = y % 2 == 0 ? i % 2 : (i + 1) % 2;
或者如果你想要它更简洁(但非常不清楚):
y = Math.floor(i / 2);
x = (i + y % 2) % 2;
上面的代码基于这样的假设:代码是这样的:
for (var i = 0; i < theString.length / 2; i++) {
var character = theString.charAt(2 * i);
// work out the coordinates
}
如果代码更像是这样:
for (var i = 0; i < theString.length; i += 2) {
var character = theString.charAt(i);
// work out the coordinates
}
然后我们需要稍微修改一下这样:
j = i / 2;
y = Math.floor(j / 2);
x = y % 2 == 0 ? j % 2 : (j + 1) % 2;
或者如果你想要它更简洁(但非常不清楚):
j = i / 2;
y = Math.floor(j / 2);
x = (j + y % 2) % 2;