45度地图之整体旋转
假设有如下一幅地图(左边为数组地图,右边为对应的位图地图),这幅地图对应的是一个一维数组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的元素):
- x_index = i% py //第i个元素在原数组中的列数
- y_index = i/ py; //第i个元素在原数组中的行数
- w=mapW/2; //地图元素的一半
- h=mapH/2; //地图元素的一半
- if(x_index == y_index) //行数等于列数
- {
- x = 0;
- y = x_index * h;
- }
- if(x_index > y_index) //列数大于行数
- {
- x = (x_index-y_index) * w;
- y = (y_index+x_index) * h
- }
- if(y_index > x_index) //行数大于列数
- {
- x = (y_index-x_index) * w;
- y = (y_index+x_index) * h;
- }
45度地图之整体旋转相关推荐
- 45度地图遮挡问题解决方案(cocos2d-x)
最近一直在做45度斜视角游戏,也就是isometric等容地图,俗称2.5D.地图上物体的前后遮挡是我遇到的第一个问题,总结一下处理方法. 遮挡问题(不知道术语),就是比如一个角色站在树后面,那么树要 ...
- 编写简易斜45度地图编辑器
最近在研究cocos2dx的地图,最开始使用的是Tiled,这个编辑器做比较小的地图还是比较强大的,不过做大地图的时候,有一些功能不太方便并且有缺陷(包括刷图繁琐以及坐标体系过于复杂,导致寻路比较看起 ...
- COCOS2D-X中45度地图通过位置获得对应行列数中的三角变换理解
晚上看COCOS2d-X的瓦片地图集这块,发现有2种地图,普通的和45度视角的.普通的通过位置获取所在行列数比较简单,大概就是具体的位置除以图素的宽高,而45度脚的方法则能够实现2.5D的效果,理解起 ...
- 怎么旋转DIV 45度 要以中心旋转
css3可以帮助你实现div的旋转! 在div中添加样式: -moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);-o-transf ...
- 45度斜角地图菱形坐标转换
!!! 此文章内容为转载,没有真实实践,只给需要的朋友提供思路,具体详细算法需要自己根据项目需求变动 !!! 我们要做一个45度游戏地图中,那么如何判断鼠标点中了哪一个碎片呢??如图: 也许你想到 ...
- python添加文字水印中间旋转45度,Python添加pdf水印
1.创建水印PDF. 1).创建文字水印pdf文件 代码:#encoding=utf-8 #author: walker #date: 2014-03-17 #function: 创建文字水印pdf ...
- 让Tiled成为一个强有力的45度菱形Staggered打点器(地图编辑器)
让Tiled成为一个强有力的45度菱形Staggered打点器(地图编辑器) 分类: cocos2dx2013-08-05 23:09 1601人阅读 评论(1) 收藏 举报 Tiled的确强大,处理 ...
- Cocos Creator 3.2 中实现2D地图3D人物45度角RPG游戏效果笔记(摄像机设置方案)
2D地图摄像机 创建一个平面几何体(plane.mesh),设置地图纹理材质 创建一个正交摄像机,视口朝向地图俯视 设置地图Layer类型为map,设置摄像机Visibility为只可见map 编辑器 ...
- python添加文字水印中间旋转45度_pythonpdf添加水印
0.用到两个扩展模块:ReportLab.PyPDF2. 1.创建水印PDF. 1).创建文字水印pdf文件 代码: #encoding=utf-8 #author: walker #date: 20 ...
最新文章
- 从PCD文件写入和读取点云数据
- 学习前做过规划,现在却连入门都不算!那么究竟如何学习Python呢
- 牛刀小试、用SharePoint 实现请假管理功能
- ACM - 第6章 数据结构基础(2)
- 【Flink】Flink 1.9 升级 到 flink 1.12.4 报错 shaded netty4 AbstractChannel AnnotatedConnectException
- VB编PiView4注册机
- java 把数据写入xml_java中用jdom 如何创建xml文档/将数据写入XML中
- mysql修改、删除数据记录
- PLC对接SQL数据库,实现数据采集和边缘计算
- T6 根据书籍条形码ISBN查询书籍,完整的方案,可安装
- vue中headers是什么_vue在响应头response中获取自定义headers操作
- Ubuntu实现网络链接设置
- Win10系统程序以管理员身份开机自启动配置
- C语言项目 - 有理数类型
- 【Spring】AOP(二)自定义来实现AOP
- 文件操作之不得不知的细节
- 求两数的最大公约数算法
- 本科毕设论文如何写(1)-- 快速下手
- P1914 小书童——凯撒密码(python实现)
- iframe跨端口报错 :Blocked a frame with origin
热门文章
- java布局管理怎么有图片_java-用于背景图像和文本的布局管理器
- linux修改重传次数,聊一聊重传次数
- oracle12c的scott,Oracle12C创建scott账户
- android 在同一activity切换layout,在 Android Studio 添加一个activity并实现跳转
- 安卓隐藏摄像_侧置摄像与隐藏前摄,拒绝单调乏味,这两款国产5G手机独具匠心...
- 二十二、 深入Python的进程和线程(上篇)
- eclipse mysql5.7_MySQL5.7、Navicate、jdk、Tomcat、eclipse全套配置及安装(win10)-Go语言中文社区...
- 全面涵盖传统方法和深度学习方法:3D人脸识别的十年发展及未来趋势
- 今日arXiv精选 | 11篇EMNLP 2021最新论文
- 杭州内推 | 阿里达摩院机器智能技术团队招聘多模态方向研究型实习生