二维瓦片网格边界检测

该博客介绍了二维瓦片网格边界检测的方法,包括每个网格的相邻格子编号,当前方向的确定,以及如何选择下一个格子的策略,强调了头节点的定义和检测结束的条件。
摘要由CSDN通过智能技术生成

 

二维瓦片网格边界检测

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 >=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值