45度地图之整体旋转
来源:互联网 发布:kaicong软件下载 编辑:程序博客网 时间:2024/04/28 18:53
假设有如下一幅地图(左边为数组地图,右边为对应的位图地图),这幅地图对应的是一个一维数组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度地图之整体旋转
- 鼠标悬停整体旋转
- 地图瓦片整体介绍
- ArcGIS for Android示例解析之地图旋转-----MapRotation
- ArcGIS4Android开发----地图旋转
- 旋转地图的代码
- 【 地图系列 】 旋转地球仪
- 地图缩放与旋转
- 地图标注随地图旋转而旋转
- 为地图添加旋转功能
- cesium地图缩放,旋转,倾斜
- SQLSERVER 之整体介绍
- JVM之整体架构
- RIAEasy之整体简介
- JVM之整体架构
- 【100题】左旋转字符串-----整体翻转+局部再次翻转
- 45度角地图--地图绘制
- levelDB之二:整体架构
- IDS/TIM/TAM安装杂记
- Javascript版俄罗斯方块(含Bug)
- 读核日记
- PDC:Anders谈C# 4.0:新功能和展望
- 没有找到MFC80UD.DLL"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"
- 45度地图之整体旋转
- 关于heap(堆)和stack(栈)的探讨(修改)
- 最近在做HongKong的Project.~~
- Eclipse 与 Flex 快捷键大全
- crontab详解
- Bash的陷阱
- Java中的集合类和接口
- 香八拉之旅~~
- 2008.11.1 《李小龙传奇》观后感