赞
踩
二维瓦片网格边界检测
1. 每个网格只考虑ENWS四个相邻格子
四个相邻格子ENSW编号为0~3
2. 当前方向D(0~3): 如果当前格子是上一个格子选择的ENSW(0~3)中的一个, 则这个选择就是当前方向
3. 选择下一个的策略:
按找以下优先级判断 (D+3)%4, (D+4)%4, (D+5)%4, (D+6)%4
(第一优选是右手侧, 最后一项是原路返回)
如果这四个点都不是, 则本点是孤立点.
4. 头节点
检测到的第一个边界点作为头节点, 把与头节点相邻的外界点(或者边界)看作上一个点.
如果是按照W->E, N->S的顺序检测, 则头节点的方向是E
5. 结束
当再次遇到头结点, 则结束
- #include <iostream>
-
- enum Dir {
- E = 0,
- N,
- W,
- S,
-
- DirMax
- };
-
- enum { Empty = 0, Full = 1, Flag = 2 };
-
- struct Point {
- int x;
- int y;
-
- bool operator==(const Point& p) const { return x == p.x && y == p.y; }
- bool operator!=(const Point& p) const { return !(*this == p); }
-
- // 边界和外部
- bool CheckPoint(int* map, int w, int h) {
- if (x < 0 || y < 0) return false;
- if (x >= w || y >=
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。