首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从标准X,Y坐标获取等轴测网格坐标

从标准X,Y坐标获取等轴测网格坐标
EN

Stack Overflow用户
提问于 2012-05-21 19:55:13
回答 2查看 1.6K关注 0票数 0

我目前正在尝试使用cocos2d中的对象将精灵添加到等轴测平铺的TMX地图中。问题是来自TMX对象的X和Y元数据是标准的2d格式(像素x,像素y),而不是等轴测网格X和Y格式。通常,您只需将它们除以平铺大小,但等轴测需要某种类型的变换。

例如,在大小为40平铺乘40平铺的64x32等距平铺地图上,(20,21)坐标处的对象显示为(640,584)

所以真正的问题是从(640,584)中得到(20,21)的公式是什么?

EN

回答 2

Stack Overflow用户

发布于 2012-05-22 05:31:02

直接来自Cocos2D的CCTMXLayer源代码:

代码语言:javascript
复制
-(CGPoint) positionForIsoAt:(CGPoint)pos
{
    CGPoint xy = {
        mapTileSize_.width /2 * ( layerSize_.width + pos.x - pos.y - 1),
        mapTileSize_.height /2 * (( layerSize_.height * 2 - pos.x - pos.y) - 2),
    };
    return xy;
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-21 21:50:32

Wikipedia's isometric projection article是你的朋友。在数学部分:

代码语言:javascript
复制
cx   | 1  0  0 |  | c' 0 -s' |  ax
cy = | 0  c  s |  | 0  1  0  |  ay
cz   | 0 -s  c |  | s' 0  c' |  az

其中c是通过将a旋转某个角度α(第一个矩阵)然后旋转β(第二个矩阵)得到的向量,s= sin( alpha ),c= cos(alpha),s‘= sin( beta ),c’= cos(beta)。然后通过预乘c:将其投影到2d上:

代码语言:javascript
复制
vx   | 1 0 0 |  cx
vy = | 0 1 0 |  cy
vz   | 0 0 1 |  cz

将所有这些矩阵变换合并为一个:

代码语言:javascript
复制
vx   | c'  0  -s' |  ax
vy = | ss' c  sc' |  ay
vz   | 0   0   0  |  az

要获得数字形式的转换,请使用您自己的alpha和beta值来生成系数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10684781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档