大神能不能再写个菱形转世界坐标
大神真的给你跪了,这个好高端
菱形转屏幕也很简单,直接反向应用矩阵就可以了
// 地图坐标转屏幕坐标
mapToScreen(point) {
// 上下压缩的角度
const scale = 70;
// 旋转的角度
const angle = 45;
// 换算弧度
let rad = -(Math.PI * angle) / 180;
// 旋转矩阵
let rotateMatrix = [Math.cos(rad), -Math.sin(rad), Math.sin(rad), Math.cos(rad)];
// 缩放矩阵
let contractMatrix = [1, 0, 0, 1 / (scale / 90)];
// 先应用压缩矩阵,再应用旋转矩阵
return this.matrix2d(this.matrix2d(point, contractMatrix), rotateMatrix);
}
// 屏幕坐标转地图坐标
screenToMap(point) {
// 上下压缩的角度
const scale = 70;
// 旋转的角度
const angle = 45;
// 换算弧度
let rad = (Math.PI * angle) / 180;
// 旋转矩阵
let rotateMatrix = [Math.cos(rad), -Math.sin(rad), Math.sin(rad), Math.cos(rad)];
// 缩放矩阵
let contractMatrix = [1, 0, 0, scale / 90];
// 先应用旋转矩阵,再应用压缩矩阵
return this.matrix2d(this.matrix2d(point, rotateMatrix), contractMatrix);
}
// 为点应用单个矩阵
matrix2d(vec2, mat2) {
let x = vec2.x * mat2[0] + vec2.y * mat2[1];
let y = vec2.x * mat2[2] + vec2.y * mat2[3];
return new cc.Vec2(x, y);
}
2赞
马克下,有空来研究
大神我给你跪了,一直很佩服算法很强的人
大神,我的菱形地块是44块,这个在这里怎么写
N=int(x/TileW - y/TileH)
M=int(x/TileW + y/TileH)
终于解决了,其实这个算法能行,大神提供的矩阵个人理解不了。
马克下
这个东西 能用白话在解释一下吗? 表示没看懂
mark.
矩阵变换一下。
找个矩阵变换的教程看看自然就会啦,计算机图形学基础
请问你的是瓦片地图实现的吗
不是,自己写算法
mark
mark
mark一下
mark
N M表示什么???
这个问题想复杂了,想解决这个问题,看这里的链接https://forum.cocos.org/t/rpg-slg/90542。
别说45度菱形了,其它任何角度的菱形求解点击块都可以轻松搞定。
运用初中的直线方程计算点到直线的距离不就行了