zoukankan      html  css  js  c++  java
  • 外螺旋矩阵排列

    外螺旋矩阵排列效果:

    fla:
    var max_x:Number=10;
    var max_y:Number=10;
    var a:loopMatrix=new loopMatrix(max_x,max_y);
    for (var x_n:uint=0; x_n<max_x; x_n++) {
        
    for (var y_n:uint=0; y_n<max_y; y_n++) {
            
    var mask_mc:Mc=new Mc();
            addChild(mask_mc);
            mask_mc.x
    =x_n*25;
            mask_mc.y
    =y_n*20;
            mask_mc.id.text
    =String(a.getDotCount(x_n,y_n));
        }
    }
    loopMatrix.as
    /*
    * 基本思路:采用数学方法直接计算出矩阵元素P(x,y)的值.
    * 将整个矩阵看成由一个一个的矩形圈组成,矩阵中某一矩形圈上任意一点P(x,y)的值=
    * 位于外圈的所有点数+本圈处于点p(x,y)前面的所有点数
    * 使用说明:
    * var max_x:Number=10;
    * var max_y:Number=10;
    * var LM:loopMatrix=new loopMatrix(max_x,max_y,false);
    * for (var x_n:uint=0; x_n<max_x; x_n++) {
         for (var y_n:uint=0; y_n<max_y; y_n++) {
             var mask_mc:Mc=new Mc();
             addChild(mask_mc);
             mask_mc.x=x_n*25;
             mask_mc.y=y_n*20;
             mask_mc.id.text=String(LM.getDotCount(x_n,y_n));
         }
    * }
    */
    package {
        public class loopMatrix {
            private 
    var _w:int;//最大列号
            private var _h:int;//最大行号
            private var in_out:Boolean;
            public 
    function loopMatrix(max_w:int,max_h:int,inout:Boolean=true):void {
                
    //行、列的序号从0开始计算;
                _w=max_w-1;
                _h
    =max_h-1;
                in_out
    =inout;

            }
            
    //计算点p(x,y)的值
            public function getDotCount(x:int,y:int):int {
                
    //序号从1开始排列
                //return getDotCount1(_w,_h,x,y)+getDotCount2(_w,_h,x,y)+1;

                
    //序号从0开始排列,in_out区分由里到外,还是有外到里
                if (in_out) {
                    
    return getDotCount1(_w,_h,x,y)+getDotCount2(_w,_h,x,y);
                }
                
    return (_w+1)*(_h+1)-(getDotCount1(_w,_h,x,y)+getDotCount2(_w,_h,x,y)+1);
            }
            
    //计算点P(x,y)外围矩形圈数
            private function getN(_w:int,_h:int,x:int,y:int):int {
                
    return Math.min(Math.min(x,y),Math.min(_w-x,_h-y));
            }
            
    //计算点P(x,y)外围矩形圈上的点数 (等差数列,这个等差数列的公差为-8)
            private function getDotCount1(_w:int,_h:int,x:int,y:int):int {
                
    var N:int=getN(_w,_h,x,y);//等差数列的项数
                var S1:int=2*(_w+_h);//等差数列的第一项,即最外围矩形上的点数
                var S2:int=2*(_w+_h)-8*N+8;//等差数列的第N项,即最后一圈矩形上的点数
                return (S1+S2)/2*N;//返回等差数列的和
            }

            
    //计算与点P(x,y)处于同一个矩形圈上,且在点P前面的所有点数 (分段函数)
            private function getDotCount2(_w:int,_h:int,x:int,y:int):int {
                
    //矩形圈从左上角开始,按照顺时针方向排列
                var N:int=getN(_w,_h,x,y);
                
    var x1:int=x-N;//点P(x,y)在所处矩形圈中的列号:从0开始计算
                var y1:int=y-N;//点P(x,y)在所处矩形圈中的行号:从0开始计算
                var W:int=_w-2*N;//点P(x,y)所在矩形圈的最大列号:从0开始计算
                var H:int=_h-2*N;//点P(x,y)所在矩形圈的最大行号:从0开始计算
                try {
                    
    var count:int=0;

                    
    if (H==0) {//特例:点P(x,y)所在矩形圈只有一行
                        return x1;
                    }
                    
    if (W==0) {//特例:点P(x,y)所在矩形圈只有一列
                        return y1;
                    }
                    
    if (y1==0) {//一般情况:点P(x,y)在矩形圈的最上面一行
                        return count=x1;
                    }
                    
    if (x1==W) {//一般情况: 点P(x,y)在矩形圈的最右边一列
                        return count=W+y1;
                    }
                    
    if (y1==H) {//一般情况: 点P(x,y)在矩形圈的最下面一行
                        return count=W+H+(W-x1);
                    }
                    
    if (x1==0) {//一般情况: 点P(x,y)在矩形圈的最左边一列
                        return count=2*(W+H)-y1;
                    }
                } 
    catch (error) {
                    trace(
    "错误");
                }
                
    return count;

            }
        }
    }

  • 相关阅读:
    GitHub注册和Git安装
    Git克隆与更新代码
    三,jenkins配置构建执行状态
    四,jenkins设置定时任务
    二,jenkins创建构建任务
    一,jenkins环境搭建
    Python Selenium Web自动化上传/下载文件图文详解
    Robot Framework自动化测试(七)--- jybot模式
    jmeter eval函数之妙用(参数化文件内含各种表达式)
    jmeter ssh+jdbc用法
  • 原文地址:https://www.cnblogs.com/ddw1997/p/1557908.html
Copyright © 2011-2022 走看看