見出し画像

モートン順序 ⇔ XY 相互変換

var mo2xy=function(m){
  var r=m & 3, t=[], x=0,y=0
  while(m>0){ m>>=2, t.push(m&3) }
  t.unshift(r)
  for(var i=0,l=t.length;i<l;i++){
    x+=(t[i] & 0x55555555)*(2**i)
    y+=((t[i] & 0xAAAAAAAA)>>1).toString(2)*(2**i)
  }
  return [x,y]
}

var xy2mo=function(x,y){
  return f(x)|f(y)<<1
  function f(n){
    n=(n|(n<<8)) & 0x00ff00ff
    n=(n|(n<<4)) & 0x0f0f0f0f
    n=(n|(n<<2)) & 0x33333333
    return   n=(n|(n<<1)) & 0x55555555
  }
}

alert('mo:45 -> xy:'+mo2xy(45))

alert('xy:3,6 -> mo:'+xy2mo(3,6))

alert('mo:15 -> xy:'+mo2xy(15))

alert('xy:3,3 -> mo:'+xy2mo(3,3))

この記事が気に入ったらサポートをしてみませんか?