« 等間隔のカクカク渦巻き(2) | メイン | 三角比相互の関係 »

2007年8月10日

[as2] 等間隔のカクカク渦巻き(3)

何がしたかったかというと。
import flash.geom.Point;

var result = createOrderMatrix( 9 , 9 );
for(var i=0;i<result.length;i++){
  trace( result[i] );
}

function createOrderMatrix( xlength:Number , ylength:Number ):Array
{
  var p:Point = new Point( 0 , 0 );
  var totalLength = xlength*ylength;
  var matrix = new Array( ylength );
  for(var i=0;i<ylength;i++){
    matrix[i] = new Array( xlength );
  }
  var xh = Math.floor(xlength/2);
  var yh = Math.floor(ylength/2);
  var xflag = true;
  var yflag = false;
  var xm:Number, ym:Number, nx:Number, ny:Number;
  xm = ym = nx = ny = 1;
  
  matrix[yh][xh] = 0;
  for(var i=1;i<totalLength;i++)
  {
    if( xflag ){
      p.x += xm/Math.abs(xm);
      if( nx == p.x ){
        xm = -(Math.abs(xm)/xm)*(Math.abs(xm)+1);
        nx += xm;
        yflag = true; xflag = false;
      }
    }
    else if( yflag ){
      p.y += ym/Math.abs(ym);
      if( ny == p.y ){
        ym = -(Math.abs(ym)/ym)*(Math.abs(ym)+1);
        ny += ym;
        yflag = false; xflag = true;
      }
    }
    if( p.x+xh >= 0 && p.x+xh < xlength &&
             p.y+yh >= 0 && p.y+yh < ylength ){
      matrix[p.y+yh][p.x+xh] = i;
    } else {
      i--;
    }
  }
  return matrix;
}
出力結果
72,73,74,75,76,77,78,79,80
71,42,43,44,45,46,47,48,49
70,41,20,21,22,23,24,25,50
69,40,19,6,7,8,9,26,51
68,39,18,5,0,1,10,27,52
67,38,17,4,3,2,11,28,53
66,37,16,15,14,13,12,29,54
65,36,35,34,33,32,31,30,55
64,63,62,61,60,59,58,57,56
渦巻き配列

もっとスマートにならんかな・・・

トラックバック(0)

このブログ記事を参照しているブログ一覧: 等間隔のカクカク渦巻き(3)

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/426

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。