Javascript 如何从瓦片地图中的一个点计算瓦片
How to calculate the tile from a point in the tile map in Javascript
我有一个用普通语言编写的 Tilemap JavaScript:
const map = [
0,0,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1
]
每个图块呈现为 128*128px 正方形。
并且我编写了一个函数来打印出两点之间的欧氏距离,在我的例子中是瓦片地图上点击事件之间的距离:
function distance(x,y,x2,y2) {
return Math.sqrt(Math.pow((x-x2), 2)+Math.pow((y-y2), 2))
}
如何计算点击发生在哪个磁贴上?
如果map
代表一个4×4的矩阵,你可以用下面的公式计算索引。
const
getIndex = (x, y) => x + 4 * y,
map = [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
console.log(getIndex(0, 0));
console.log(getIndex(1, 0));
假设你有一个矩阵 n x m 其中
n = 行数
m = 列数
你将得到一个包含 n * m 个值的数组
所以要计算两点的欧几里德距离,你需要知道那个值的水平(x)索引和垂直(y)索引,例如:
map = [1, 1, 1, 1]
// map[0] is in the position (0, 0)
// map[1] is in the position (1, 0)
// map[2] is in the position (0, 1)
// map[3] is in the position (1, 1)
您可以使用此函数执行此操作:
const getX = (index, m) => index % m
const getY = (index, n) => Math.floor(index / n)
现在您可以使用您的函数了:
let m = 128,
n = 128,
index = 0,
index2 = 1,
map = [// n * m values here],
x, y, x1, y1
x = getX(index, m)
y = getY(index, n)
x1 = getX(index1, m)
y1 = getY(index1, n)
d = distance(x, y , x1, y1)
我有一个用普通语言编写的 Tilemap JavaScript:
const map = [
0,0,1,1,
1,1,1,1,
1,1,1,1,
1,1,1,1
]
每个图块呈现为 128*128px 正方形。
并且我编写了一个函数来打印出两点之间的欧氏距离,在我的例子中是瓦片地图上点击事件之间的距离:
function distance(x,y,x2,y2) {
return Math.sqrt(Math.pow((x-x2), 2)+Math.pow((y-y2), 2))
}
如何计算点击发生在哪个磁贴上?
如果map
代表一个4×4的矩阵,你可以用下面的公式计算索引。
const
getIndex = (x, y) => x + 4 * y,
map = [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
console.log(getIndex(0, 0));
console.log(getIndex(1, 0));
假设你有一个矩阵 n x m 其中 n = 行数 m = 列数
你将得到一个包含 n * m 个值的数组
所以要计算两点的欧几里德距离,你需要知道那个值的水平(x)索引和垂直(y)索引,例如:
map = [1, 1, 1, 1]
// map[0] is in the position (0, 0)
// map[1] is in the position (1, 0)
// map[2] is in the position (0, 1)
// map[3] is in the position (1, 1)
您可以使用此函数执行此操作:
const getX = (index, m) => index % m
const getY = (index, n) => Math.floor(index / n)
现在您可以使用您的函数了:
let m = 128,
n = 128,
index = 0,
index2 = 1,
map = [// n * m values here],
x, y, x1, y1
x = getX(index, m)
y = getY(index, n)
x1 = getX(index1, m)
y1 = getY(index1, n)
d = distance(x, y , x1, y1)