文档章节

拼接菱形的冲突判定方法(二)

李勇2
 李勇2
发布于 2015/03/02 09:38
字数 556
阅读 15
收藏 0

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


下面采用 离散的方式:

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

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

而不能出现有错位的情况


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

我们可以把整个背景离散化, 根据单位菱形的宽度的一半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   值是一个数组包含所有占用该块的建筑 序列


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




本文转载自:http://blog.csdn.net/liyong748/article/details/7584684

共有 人打赏支持
李勇2

李勇2

粉丝 46
博文 189
码字总数 62209
作品 0
广州
程序员
远离框架,实现自己REST风格的Servlet框架(三)

接上文:远离框架,[实现自己REST风格的Servlet框架(二)][1]一个ajax的url在相对路径下提交会产生拼接后的路径,以下是解决办法,如果有更好的办法希望大家指教,拜谢。 [1]: http://my.o...

lbnan
2013/04/09
0
0
eclipse解决git冲突举例

本地修改了两个文件,提交时提示有冲突,想来应该是没有从远程仓库下载最新代码导致的。通过右击项目 -> Team -> Sychronized WorkSpace,比较本地仓库和远程仓库的异同:   此时没有更好的...

Code辉
07/18
0
0
Python的基础知识之常用类型-字符串

程序猿的共同点:白发、夜猫子、没对象,但是都知道字符串。 20161291231176472.JPG 字符串 Python中字符串有单引号'' 、双引号 "" 三引号 ''' ''',引号是就近匹配原则 单引号:字符串 ' le...

摸着石头过河_崖边树
2017/12/15
0
0
怎么一步步编写简单的PHP的Framework(二十)

上一次我把SqlParser这个类的主要结构讲了一下,这次我就将这个类的函数编写了。 按照上节课的内容,主要的函数有下面几个: private function _where($where){}private function _field($fi...

阳光test
2012/12/22
0
1
kotlin入门(1)----变量

前言 kotlin语言以简洁著称,今天对kotlin语法做一些基本讲解 今天涉及内容有: 变量的声明和使用 变量类型推断与声明 变量取值范围 打印菱形(函数入门) 布尔运算 final变量声明 预热 由于我...

奔跑的佩恩
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker run 创建一个新的容器并运行一个命令

docker run常用命令 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 1.OPTIONS说明 -t:为容器重新分配一个伪输入终端,通常与 -i 同时使...

lwenhao
11分钟前
1
0
安装Win出现无法创建新的分区也找不到现有的分区解决方案

无法创建新的分区也找不到现有的分区 ### 首先在安装界面按下 Shift+F10### 在出现的CMD界面输入: diskpart 进入磁盘管理工具diskpart### 可以输入 : list disk 查看磁盘列表l...

Kxvz
13分钟前
1
0
关于 @ngrx/Store 下 obj 的扩展问题

昨天做 task 的时候,遇到了一个问题。 TypeError: can't define property "x": "obj" is not extensible 而我的代码是 public txTiles: Array<TransactionFilterTile>; constructor(priv......

IrisHuang
15分钟前
1
0
presto内存管理及调优

内存池 Presto有三种内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。这三个内存池占用的内存大小是由下面算法进行分配的: builder.put(RESERVED_POOL, new MemoryPool(RESERVED...

张欢19933
16分钟前
1
0
Mysql5.7服务版安装

步骤1: 勾选同意协议 步骤2:选择Server only模式 步骤3:选择安装目录 步骤4:执行文件 步骤5:端口号与用户配置 步骤6:选择标准系统用户 Finish后,安装完成。...

lyle_luo
16分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部