我有一个带有脚本的HTML文件,该脚本给出了一个包含扇区的映射。就像A1,B2,但是每个部门都有1-9个子部门.例如,A1-5,B2-9,等等。到目前为止,我对每个子扇区都有一堆IF语句。下面是一个例子
if (x > 2093-161/3 && x < 2093 && y < 1932-161*2/3 && y > 1771) {
var isnumber = "9";
}
if (x > 2093-161*2/3 && x < 2093-161/3 && y < 1932-161*2/3 && y > 1771) {
var isnumber = "8";
}
if (x > 1932 && x < 2093-161*2/3 && y < 1932-161*2/3 && y > 1771) {
var isnumber = "7";
}
if (x > 2093-161/3 && x < 2093 && y < 1932-161*1/3 && y > 1932-161*2/3) {
var isnumber = "6";
}
if (x > 2093-161*2/3 && x < 2093-161/3 && y < 1932-161*1/3 && y > 1932-161*2/3) {
var isnumber = "5";
}
if (x > 1932 && x < 2093-161*2/3 && y < 1932-161*1/3 && y > 1932-161*2/3) {
var isnumber = "4";
}
if (x > 2093-161/3 && x < 2093 && y < 161*12 && y > 1932-161*1/3) {
var isnumber = "3";
}
if (x > 2093-161*2/3 && x < 2093-161/3 && y < 161*12 && y > 1932-161*1/3) {
var isnumber = "2";
}
if (x > 1932 && x < 2093-161*2/3 && y < 161*12 && y > 1932-161*1/3) {
var isnumber = "1";
}
有更简单的方法吗?

发布于 2020-10-20 19:53:53
首先,我们需要获得相对于每个扇区的x和y坐标,这意味着我们需要将坐标转换为0和161之间的相对坐标。就像这样:
var xRelativeToSector = x % 161;
var yRelativeToSector = y % 161;然后,我们需要将这些相对坐标转换为列和行索引,我们有3个可能的列和3个可能的行,因此:
var column = Math.floor(3 * xRelativeToSector / 161);
var row = Math.floor(3 * yRelativeToSector / 161);最后,我们使用column和row来计算这个公式row * numberOfColumns + column的个数。请注意,本例中的行是从下到顶排序的,因此我们使用(2 - row)而不是row。我们还需要将1添加到结果中,因为公式给出了一个基于0的索引,我们需要一个基于1的索引。就像这样:
var isnumber = 3 * (2 - row) + column + 1;因此,您可以简单地将这些代码分组到一个函数中,并使用它获取子扇区编号:
function getSubSectorNumber(x, y) {
var xRelativeToSector = x % 161;
var yRelativeToSector = y % 161;
var column = Math.floor(3 * xRelativeToSector / 161);
var row = Math.floor(3 * yRelativeToSector / 161);
return 3 * (2 - row) + column + 1;
}https://stackoverflow.com/questions/64451589
复制相似问题