码迷,mamicode.com
首页 > 其他好文 > 详细

网格道路中的格子状态计算

时间:2018-11-21 18:38:20      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:sharp   const   sha   一个   line   过程   class   src   方便   

一、分析

下图包含了由正方形格子组成的道路的全部形态。(没有斜向)

技术分享图片

 

单个格子的状态共有6种:

技术分享图片

 

 

已知构成道路的格子集合:[(x1,y1),(x2,y2)...(xn,yn)],(x,y)代表格子位置。计算道路上每个格子的状态。(格子坐标系,x右正,y上正)

因为每个格子有4个临边,对格子(x,y)有临边:

 左边 L: (x-1, y)

 上边 T: (x,y+1)

 右边 R: (x+1, y)

 下边 B: (x,y-1)


假设最终格子状态为s。计算过程:

1、设置s=无邻格

2、判断L,如果有格,则s=s + L,否则s不变。(s + L)含义为s增加L方向有邻格

3、按步骤2依次判断T R B。为了方便记,如果对应临边有道路格子,则记为1,没有记为0。对于一个格子描述其临边状态可表示为:_ _ _ _ 

技术分享图片         技术分享图片      技术分享图片 技术分享图片技术分享图片技术分享图片

State(LTRB):0000                 State(LTRB):1101             State(LTRB):1010          State(LTRB):1011      State(LTRB):1111            State(LTRB):0110

 

由图可见,(2)有4种旋转,(3)有两种,(4)有3种,(6)有4种。

 

二、实现

   //按位记录4个方向的邻格状态,有为1,无为0
   const int L = 1 << 0;
   const int T = 1 << 1;
   const int R = 1 << 2;
   const int B = 1 << 3;

   //计算x,y 格子的邻格状态
   int s = 0; // 初始为无邻格
   // 依次检查
   if(IsExist(x-1, y))
       s |= L;
   if(IsExist(x, y+1))
       s |= T;
   if(IsExist(x+1, y))
       s |= R;
   if(IsExist(x, y-1))
       s |= B;
   // 最终s的值可知道在各个方向上的邻格情况

  

网格道路中的格子状态计算

标签:sharp   const   sha   一个   line   过程   class   src   方便   

原文地址:https://www.cnblogs.com/dongzee/p/9996714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!