博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拼接菱形的冲突判定方法(二)
阅读量:6626 次
发布时间:2019-06-25

本文共 762 字,大约阅读时间需要 2 分钟。

hot3.png

上次我尝试 从 坐标轴映射, 或者说是数学分析的方法判定冲突, 但是很难做到, 因为 难以计算点在仿射坐标系的投影, 并且也有一定精度问题

下面采用 离散的方式:

首先对于一个拼接菱形的话, 如果我们假设它的位置是离散化的, 如下图:

只能允许菱形和菱形之间的边是对齐的,

而不能出现有错位的情况

如何避免这种情况呢, 有一种方法:

我们可以把整个背景离散化, 根据单位菱形的宽度的一半sizeX 和高度的一半 把整个背景网格化, 同时要求每个拼接菱形 的包围矩形的左上点 和这个网格点对齐

每个拼接菱形 在水平移动的时候,每次跨动两个单位, 垂直移动的时候, 每次跨动 2个单位, 

而斜着移动的时候,水平跨越1个单位, 垂直跨越1个单位 如图:

为了满足这个条件, 避免出现两个菱形只有一半相交的情况,  首先如何表示坐标;

既然是离散化的我们可以采用两个整数 作为 天然的坐标 x, y

只要保证x  y 的奇偶 性相同(或者时刻相反), 就可以满足上面的移动规律。

我们需要把一个拼接菱形所有的占据的块计算出来, 已知左上角 为 x, y 编号

那么 根据上一篇文章中的结论, 拼接菱形最上面的点的编号是:(sx, sy 是拼接菱形的宽度和高度)

(x+ sy,  y)

for i  < sx

   for j < sy

开始遍历每一个方块, 根据定义, 向右x正方向, 向 下 y正方向

菱形x方向移动, 则initX+1 initY+1

y方向移动, initX-1 initY+1

这样就能得到所有块的编号

采用一个哈希表存储, 键值是x*10000+y   值是一个数组包含所有占用该块的建筑 序列

下一章我们描述如果进行冲突判定

转载于:https://my.oschina.net/u/186074/blog/381139

你可能感兴趣的文章
.net(vs2010)调试技巧
查看>>
哈希方法
查看>>
45个纯 CSS 实现的精美边框效果【附在线演示和源码】【下篇】
查看>>
js的逻辑 OR 运算符- ||
查看>>
[SQL Server]一次执行资料夹内的.sql 指令码
查看>>
SQLServer中的死锁的介绍
查看>>
【计算机视觉】粒子滤波跟踪
查看>>
hadoop集群扩展
查看>>
操作系统诊断
查看>>
[Compose] 19. Leapfrogging types with Traversable
查看>>
Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
查看>>
2015年度新增开源软件排名TOP100
查看>>
设计模式 之 原型
查看>>
BZOJ 2456: mode(新生必做的水题)
查看>>
SSM实战——秒杀系统之高并发优化
查看>>
View State
查看>>
自旋锁spinlock解析
查看>>
【java.lang.UnsupportedClassVersionError】版本不一致出错
查看>>
Ubuntu16.04 安装RabbitMQ
查看>>
javascript游戏引擎
查看>>