假设有如下一幅地图(左边为数组地图,右边为对应的位图地图),这幅地图对应的是一个一维数组int map[16],且我们知道总共有4行,4列,对于数组中的元素我们可以通过下面的公式求出它所在的行列, 第n个元素的行值为n/py,其中py为总列数(4),而列值为n%py.

经过45度的旋转后,我们想要得到的地图将变为(左边为数组地图,右边为将黑色背景作透明处理后对应的位图地图)

我们将45度地图中与原来位图的对应行列用红色标记起来,这里我们只标记一部分点,因为用这几个点就可以解释整个地图的旋转

假设数组中第一个元素,既1的位置在(x,y),我们可以发现原来的90度数组中,行列值相同,既6,11,16这几个点在旋转后,相对与点1的位置,横坐标没有发生改变,而知识纵坐标改变,而差值恰好是位图高度,然后我们观察,6这个点的纵坐标为y+1*32,且6在原数组中的行列值是(1,1),11这个点的纵坐标为y+2*32,且11在原数组中的行列值是(2,2),16这个点的纵坐标为y+3*32,且16在原数组中的行列值是(3,3),由此我们可以推断出,在原数组中行值与列值相同的元素,他的坐标为(x,y+n*32),其中n为行值或者列值,在这里他们是相等的,好了,现在我们解决了一种情况,还剩下两种,一个是行值大于列值,一个是列值大于行值,现在我们来看看下面这幅图

上面的图片我们给出了几张位图所粘贴的坐标,我们可以发现一个规律,凡是在原数组中行数大于列数的,如5,9,10,他们的横坐标都存在一个n*32和一个m*16,归纳一下可以得出,n是列数-行数的结果列数-行数的结果,例如元素5,他的n就为0-1 = -1,而m是列数+行数的结果,例如元素5,他的m就为0+1 = 1,而对于原数组中列数大于行数的,如2,3,7,他们的横坐标也都存在一个n*32和一个m*16,归纳一下可以得出,n是列数-行数的结果列数-行数的结果,例如元素2,他的n就为1-0 = 1,而m是列数+行数的结果,例如元素2,他的m就为0+1 = 1

下面是整个算法的代码(以上所有的第1个元素其实就是数组中下标为1的元素):

  1. x_index = i% py                //第i个元素在原数组中的列数
  2. y_index = i/  py;                //第i个元素在原数组中的行数
  3. w=mapW/2;       //地图元素的一半
  4. h=mapH/2;       //地图元素的一半
  5. if(x_index == y_index)     //行数等于列数
  6. {
  7. x = 0;
  8. y = x_index * h;
  9. }
  10. if(x_index > y_index)        //列数大于行数
  11. {
  12. x = (x_index-y_index) * w;
  13. y =  (y_index+x_index) * h
  14. }
  15. if(y_index > x_index)        //行数大于列数
  16. {
  17. x = (y_index-x_index) * w;
  18. y = (y_index+x_index) * h;
  19. }

45度地图之整体旋转相关推荐

  1. 45度地图遮挡问题解决方案(cocos2d-x)

    最近一直在做45度斜视角游戏,也就是isometric等容地图,俗称2.5D.地图上物体的前后遮挡是我遇到的第一个问题,总结一下处理方法. 遮挡问题(不知道术语),就是比如一个角色站在树后面,那么树要 ...

  2. 编写简易斜45度地图编辑器

    最近在研究cocos2dx的地图,最开始使用的是Tiled,这个编辑器做比较小的地图还是比较强大的,不过做大地图的时候,有一些功能不太方便并且有缺陷(包括刷图繁琐以及坐标体系过于复杂,导致寻路比较看起 ...

  3. COCOS2D-X中45度地图通过位置获得对应行列数中的三角变换理解

    晚上看COCOS2d-X的瓦片地图集这块,发现有2种地图,普通的和45度视角的.普通的通过位置获取所在行列数比较简单,大概就是具体的位置除以图素的宽高,而45度脚的方法则能够实现2.5D的效果,理解起 ...

  4. 怎么旋转DIV 45度 要以中心旋转

    css3可以帮助你实现div的旋转! 在div中添加样式: -moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);-o-transf ...

  5. 45度斜角地图菱形坐标转换

    !!! 此文章内容为转载,没有真实实践,只给需要的朋友提供思路,具体详细算法需要自己根据项目需求变动 !!! 我们要做一个45度游戏地图中,那么如何判断鼠标点中了哪一个碎片呢??如图:   也许你想到 ...

  6. python添加文字水印中间旋转45度,Python添加pdf水印

    1.创建水印PDF. 1).创建文字水印pdf文件 代码:#encoding=utf-8 #author: walker #date: 2014-03-17 #function: 创建文字水印pdf ...

  7. 让Tiled成为一个强有力的45度菱形Staggered打点器(地图编辑器)

    让Tiled成为一个强有力的45度菱形Staggered打点器(地图编辑器) 分类: cocos2dx2013-08-05 23:09 1601人阅读 评论(1) 收藏 举报 Tiled的确强大,处理 ...

  8. Cocos Creator 3.2 中实现2D地图3D人物45度角RPG游戏效果笔记(摄像机设置方案)

    2D地图摄像机 创建一个平面几何体(plane.mesh),设置地图纹理材质 创建一个正交摄像机,视口朝向地图俯视 设置地图Layer类型为map,设置摄像机Visibility为只可见map 编辑器 ...

  9. python添加文字水印中间旋转45度_pythonpdf添加水印

    0.用到两个扩展模块:ReportLab.PyPDF2. 1.创建水印PDF. 1).创建文字水印pdf文件 代码: #encoding=utf-8 #author: walker #date: 20 ...

最新文章

  1. 从PCD文件写入和读取点云数据
  2. 学习前做过规划,现在却连入门都不算!那么究竟如何学习Python呢
  3. 牛刀小试、用SharePoint 实现请假管理功能
  4. ACM - 第6章 数据结构基础(2)
  5. 【Flink】Flink 1.9 升级 到 flink 1.12.4 报错 shaded netty4 AbstractChannel AnnotatedConnectException
  6. VB编PiView4注册机
  7. java 把数据写入xml_java中用jdom 如何创建xml文档/将数据写入XML中
  8. mysql修改、删除数据记录
  9. PLC对接SQL数据库,实现数据采集和边缘计算
  10. T6 根据书籍条形码ISBN查询书籍,完整的方案,可安装
  11. vue中headers是什么_vue在响应头response中获取自定义headers操作
  12. Ubuntu实现网络链接设置
  13. Win10系统程序以管理员身份开机自启动配置
  14. C语言项目 - 有理数类型
  15. 【Spring】AOP(二)自定义来实现AOP
  16. 文件操作之不得不知的细节
  17. 求两数的最大公约数算法
  18. 本科毕设论文如何写(1)-- 快速下手
  19. P1914 小书童——凯撒密码(python实现)
  20. iframe跨端口报错 :Blocked a frame with origin

热门文章

  1. java布局管理怎么有图片_java-用于背景图像和文本的布局管理器
  2. linux修改重传次数,聊一聊重传次数
  3. oracle12c的scott,Oracle12C创建scott账户
  4. android 在同一activity切换layout,在 Android Studio 添加一个activity并实现跳转
  5. 安卓隐藏摄像_侧置摄像与隐藏前摄,拒绝单调乏味,这两款国产5G手机独具匠心...
  6. 二十二、 深入Python的进程和线程(上篇)
  7. eclipse mysql5.7_MySQL5.7、Navicate、jdk、Tomcat、eclipse全套配置及安装(win10)-Go语言中文社区...
  8. 全面涵盖传统方法和深度学习方法:3D人脸识别的十年发展及未来趋势
  9. 今日arXiv精选 | 11篇EMNLP 2021最新论文
  10. 杭州内推 | 阿里达摩院机器智能技术团队招聘多模态方向研究型实习生