莫顿码 ,实现了一维与二维(或多维)的转换。它通过交叉存储两个数的位产生一个数,即莫顿码。

可以应用于为一个整数对产生一个唯一索引。

例如,对于坐标系中的坐标点使用莫顿编码生成的莫顿码,可以唯一索引对应的点。这些索引为“Z”形排序 。

计算莫顿码:

有两种方式,一交叉分离计算,二查询对应的莫顿表计算。例如,计算两个unsigned short的莫顿码

1 交叉分离

// Encode x and y, as yxyxyx.
unsigned short x;   // Interleave bits of x and y, so that all of the
unsigned short y;   // bits of x are in the even positions and y in the odd;
unsigned int z = 0; // z gets the resulting Morton Number.
for (int i = 0; i < sizeof(x) * CHAR_BIT; i++) // unroll for more speed...
{z |= (x & 1U << i) << i | (y & 1U << i) << (i + 1);
}

2 查询莫顿表

static const unsigned short MortonTable256[256] =
{0x0000, 0x0001, 0x0004, 0x0005, 0x0010, 0x0011, 0x0014, 0x0015, 0x0040, 0x0041, 0x0044, 0x0045, 0x0050, 0x0051, 0x0054, 0x0055, 0x0100, 0x0101, 0x0104, 0x0105, 0x0110, 0x0111, 0x0114, 0x0115, 0x0140, 0x0141, 0x0144, 0x0145, 0x0150, 0x0151, 0x0154, 0x0155, 0x0400, 0x0401, 0x0404, 0x0405, 0x0410, 0x0411, 0x0414, 0x0415, 0x0440, 0x0441, 0x0444, 0x0445, 0x0450, 0x0451, 0x0454, 0x0455, 0x0500, 0x0501, 0x0504, 0x0505, 0x0510, 0x0511, 0x0514, 0x0515, 0x0540, 0x0541, 0x0544, 0x0545, 0x0550, 0x0551, 0x0554, 0x0555, 0x1000, 0x1001, 0x1004, 0x1005, 0x1010, 0x1011, 0x1014, 0x1015, 0x1040, 0x1041, 0x1044, 0x1045, 0x1050, 0x1051, 0x1054, 0x1055, 0x1100, 0x1101, 0x1104, 0x1105, 0x1110, 0x1111, 0x1114, 0x1115, 0x1140, 0x1141, 0x1144, 0x1145, 0x1150, 0x1151, 0x1154, 0x1155, 0x1400, 0x1401, 0x1404, 0x1405, 0x1410, 0x1411, 0x1414, 0x1415, 0x1440, 0x1441, 0x1444, 0x1445, 0x1450, 0x1451, 0x1454, 0x1455, 0x1500, 0x1501, 0x1504, 0x1505, 0x1510, 0x1511, 0x1514, 0x1515, 0x1540, 0x1541, 0x1544, 0x1545, 0x1550, 0x1551, 0x1554, 0x1555, 0x4000, 0x4001, 0x4004, 0x4005, 0x4010, 0x4011, 0x4014, 0x4015, 0x4040, 0x4041, 0x4044, 0x4045, 0x4050, 0x4051, 0x4054, 0x4055, 0x4100, 0x4101, 0x4104, 0x4105, 0x4110, 0x4111, 0x4114, 0x4115, 0x4140, 0x4141, 0x4144, 0x4145, 0x4150, 0x4151, 0x4154, 0x4155, 0x4400, 0x4401, 0x4404, 0x4405, 0x4410, 0x4411, 0x4414, 0x4415, 0x4440, 0x4441, 0x4444, 0x4445, 0x4450, 0x4451, 0x4454, 0x4455, 0x4500, 0x4501, 0x4504, 0x4505, 0x4510, 0x4511, 0x4514, 0x4515, 0x4540, 0x4541, 0x4544, 0x4545, 0x4550, 0x4551, 0x4554, 0x4555, 0x5000, 0x5001, 0x5004, 0x5005, 0x5010, 0x5011, 0x5014, 0x5015, 0x5040, 0x5041, 0x5044, 0x5045, 0x5050, 0x5051, 0x5054, 0x5055, 0x5100, 0x5101, 0x5104, 0x5105, 0x5110, 0x5111, 0x5114, 0x5115, 0x5140, 0x5141, 0x5144, 0x5145, 0x5150, 0x5151, 0x5154, 0x5155, 0x5400, 0x5401, 0x5404, 0x5405, 0x5410, 0x5411, 0x5414, 0x5415, 0x5440, 0x5441, 0x5444, 0x5445, 0x5450, 0x5451, 0x5454, 0x5455, 0x5500, 0x5501, 0x5504, 0x5505, 0x5510, 0x5511, 0x5514, 0x5515, 0x5540, 0x5541, 0x5544, 0x5545, 0x5550, 0x5551, 0x5554, 0x5555
};
unsigned short x; // Interleave bits of x and y, so that all of the
unsigned short y; // bits of x are in the even positions and y in the odd;
unsigned int z;   // z gets the resulting 32-bit Morton Number.
z = MortonTable256[y >> 8]   << 17 | MortonTable256[x >> 8]   << 16 |MortonTable256[y & 0xFF] <<  1 | MortonTable256[x & 0xFF];

Regard more about the above example  .

Morton Code相关推荐

  1. 莫顿码(Morton code)介绍

    概念 莫顿码是将多维数据转化为一维数据的编码. 莫顿编码定义了一条 Z 形的空间填充曲线,因此莫顿编码通常也称Z阶曲线(Z-order curve). 在 N 维空间中对于彼此接近的坐标具有彼此接近的 ...

  2. 莫顿码Morton code的c语言实现

    十进制 Morton码可以使用栅格单元的行列号计算 ###原理部分 遵循C语言规范,矩阵的第一行为"0"行.第一列为"0"列,先将十进制的行列号转换成二进制数, ...

  3. morton码_7-基于Morton码的一种二维游程编码方法

    基于 Morton 码的一种二维游程压缩编码方法 孟庆武 1 孟露 2 伊海波 3 (1. 黑龙江工程学院 测绘工程学院,黑龙江 哈尔滨 150050 : 2. 东北林 业大学 林学院, 黑龙江 哈尔 ...

  4. 线性八叉树_基于三维点云数据的线性八叉树编码压缩算法(权毓舒, 何明一,).pdf...

    基于三维点云数据的线性八叉树编码压缩算法(权毓舒, 何明一,) ·70 · 计算机应用研究 2005 年 基于三维点云数据的线性八叉树编码压缩算法 * 权毓舒, 何明一 ( 西北工业大学 电子信息学院 ...

  5. Partitioning of Geographic Data(NDS,导航数据标准中的地理数据分区)

    地理数据映射到NDS数据库,NDS坐标系统编码,tile划分. 7.1 坐标参考系 NDS使用墨卡托投影或结合wgs84和EGM96进行地图投影和定位目标. 7.1.1 WGS 84和EGM 96 N ...

  6. 游戏场景管理(五)空间划分

    一 前言 空间划分算法有很多,比如均匀网格,四/八叉树,k-d树,Bsp树,每一种算法都有自己的优缺点,我们需要从理论上理解这些算法,然后在实际项目中进行灵活的运用. 游戏中经常使用空间划分算法来优化 ...

  7. 点云压缩 GPCC属性编码 LOD划分方式介绍(G-PCC codec description v12)

    目录 一.LOD生成 原理 代码实现 二.LOD生成的可扩展复杂性实现 原理 代码实现 三.LOD属性编码的dist2值计算方法 四.基于常规采样的LOD生成 未完待续 LOD是一种基于层次变换的方法 ...

  8. morton码_求矩阵四叉树的四进制和十进制Morton码

    Yogurt是一名学GIS的学生,今天要跟大家分享的是四叉树这种空间索引方式的Morton编码方法,接下来我将在小课堂中简单介绍一下空间索引以及其几种编码方式~~ ------------------ ...

  9. 如何在团队中做好Code Review

    一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...

最新文章

  1. SP1043 GSS1 - Can you answer these queries I(线段树,区间最大子段和(静态))
  2. 虚拟示波器OSC802介绍、拆机
  3. ZOJ 2112 Dynamic Rankings
  4. 磁珠 符号_贴片磁珠功能_贴片磁珠应用
  5. where、having、group by、order by、count的使用注意
  6. 干活的不如写ppt的吗_干活不如写PPT 这话太真实
  7. 比特币:一种点对点的电子现金系统
  8. 1000道Python题库系列分享16(10道填空题)
  9. python爬虫淘宝视频_Python2爬虫:以抓取淘宝MM为例(实战)
  10. 未来无人车市场中,谁最赚钱?
  11. Altair Inspire Extrude 2021.1.0 Build 6936 x64
  12. nexus5 android5.0 型号LRX210 ROOT
  13. OSError: [Errno 1] Operation not permitted: '/tmp/pip-g3bg0s-uninstall/System/Library/Frameworks/Pyt
  14. 计算机设计媒体专业排名,2020USNEWS媒体与数字媒体专业综合排名
  15. ElasticSearch已有字段添加Fields
  16. Python实现日周月排行榜
  17. 数据库字符集utf8和utf8mb4的详细区别
  18. 全网最新小白API查Q绑定带反查SGK+带接口
  19. Android开发指南
  20. 企业网站建设需要多少钱?

热门文章

  1. matlab 等高线数值显示_「matlab等高线」matlab中contour 函数的用法(绘制等高线) - seo实验室...
  2. 【硬件】通俗易懂的讲解晶体管(三极管和MOS管)的工作原理
  3. C++stl 向量,链表,栈,队列(vector, list, stack, queue)
  4. linux oops 自动重启,Linux 死机复位(oops、panic)问题定位指南
  5. MySQL员工表题目_MySql的sql语法练习【员工、部门】
  6. Windows线程同步、CreateThread与_beginthread的区别
  7. 在国企工作是什么体验?想熬出头难么?
  8. 序列检索系统在淘宝首页信息流中的实践
  9. java removeattribute_JS removeAttribute()方法实现删除元素的某个属性
  10. php生成二维码, 做多级分销,推广,推荐人