发明名称 一种基于2D Growing Tree 迷宫的数字置乱方法
摘要 本发明提供一种基于2D Growing Tree迷宫的数字置乱方法,预先对Growing Tree迷宫生成区域进行人为限定,从而可用于人为指定的任意2D封闭连通区域,同时按迷宫节点更新顺序对迷宫设定区域的每个节点赋予唯一编号,由此产生迷宫设定区域所有节点的排列,在此基础上构造了基于2D Growing Tree迷宫的节点更新序列和节点更新序列复合的置乱方法,从而可将所有节点置乱。本发明所给出的置乱方法具有普适性和灵活性,在使用过程中不存在任何限制,不仅能用于传统置乱方法所针对的规则区域,例如正方形和矩形区域,也可用于任意选定的2D封闭连通不规则区域置乱。本发明也给出了用于像素矩阵,R、G、B通道矩阵和比特位面的图像置乱方法。
申请公布号 CN104376528A 申请公布日期 2015.02.25
申请号 CN201410748364.8 申请日期 2014.12.08
申请人 陕西师范大学 发明人 邵利平
分类号 G06T1/00(2006.01)I 主分类号 G06T1/00(2006.01)I
代理机构 西安通大专利代理有限责任公司 61200 代理人 陆万寿
主权项 一种基于2D Growing Tree迷宫的数字置乱方法,其特征在于包括以下步骤:第1步:设定迷宫初始范围S<sub>init</sub>=()<sub>m×n</sub>和迷宫有效区域S<sub>maze</sub>=(s<sub>i,j</sub>)<sub>m×n</sub>,对于<img file="FDA0000627828900000011.GIF" wi="131" he="79" />i=0,…,m‑1,j=0,…,n‑1,若<img file="FDA0000627828900000014.GIF" wi="251" he="83" />则标记s<sub>i,j</sub>=‑1,反之则标记s<sub>i,j</sub>=0表示该节点未访问,若s<sub>i,j</sub>&gt;0表示该节点已访问;第2步:对于<img file="FDA0000627828900000012.GIF" wi="279" he="84" />i=0,…,m‑1,j=0,…,n‑1,记s<sub>i,j</sub>.d,d=0,1,2,3依次为节点s<sub>i,j</sub>的下方、右方、上方和左方墙,初始化s<sub>i,j</sub>.d=‑1,d=0,1,2,3,即将S<sub>maze</sub>范围内的所有节点以墙进行分隔,s<sub>i,j</sub>.d=‑1表示有墙,s<sub>i,j</sub>.d=0表示无墙;第3步:选择随机数发生器y=RG(x),设定初始值RG.init=seed,初始化迷宫节点列表A<sub>maze</sub>=Φ,节点更新序列A<sub>update</sub>=Φ,由随机数发生器产生2个概率P<sub>recent</sub>,P<sub>oldest</sub>∈[0,1);第4步:选取<img file="FDA0000627828900000013.GIF" wi="590" he="77" />将s<sub>x,y</sub>分别加到A<sub>maze</sub>和A<sub>update</sub>,即A<sub>maze</sub>=A<sub>maze</sub>.add(s<sub>x,y</sub>)A<sub>update</sub>=A<sub>update</sub>.add(s<sub>x,y</sub>);第5步:若A<sub>maze</sub>≠Φ,则循环执行第6步~第8步;第6步:产生1个随机数P∈[0,1),若P∈[0,P<sub>recent</sub>],则取A<sub>maze</sub>尾部元素作为当前节点s<sub>x,y</sub>;反之若P∈[P<sub>recent</sub>,P<sub>recent</sub>+P<sub>oldest</sub>],则取A<sub>maze</sub>头部元素作为当前节点s<sub>x,y</sub>,反之则从A<sub>maze</sub>中随机取一个元素作为当前节点s<sub>x,y</sub>,s<sub>x,y</sub>=A<sub>maze</sub>(index),index=random(A<sub>maze</sub>.length);第7步:若s<sub>x,y</sub>周围的邻近节点中s<sub>x+1,y</sub>,s<sub>x,y+1</sub>,s<sub>x‑1,y</sub>,s<sub>x,y‑1</sub>存在未访问的有效节点s<sub>x′,y′</sub>∈S<sub>maze</sub>,则将s<sub>x′,y′</sub>加入到A<sub>maze</sub>,即A<sub>maze</sub>=A<sub>maze</sub>.add(s<sub>x′,y′</sub>),A<sub>update</sub>=A<sub>update</sub>.add(s<sub>x′,y′</sub>);第8步:若s<sub>x,y</sub>周围的邻近节点中s<sub>x+1,y</sub>,s<sub>x,y+1</sub>,s<sub>x‑1,y</sub>,s<sub>x,y‑1</sub>不存在未访问的有效节点s<sub>x′,y′</sub>∈S<sub>maze</sub>,则删除A<sub>maze</sub>索引位置为Index位置的元素,即A<sub>maze</sub>.delete(index);第9步:利用A<sub>update</sub>构造S<sub>maze</sub>=(s<sub>i,j</sub>)<sub>m×n</sub>范围内所有节点间的映射关系,从而将S<sub>maze</sub>=(s<sub>i,j</sub>)<sub>m×n</sub>范围内的所有节点置乱。
地址 710062 陕西省西安市长安区陕西师范大学