![見出し画像](https://assets.st-note.com/production/uploads/images/95185138/rectangle_large_type_2_dfac7d9f1916c1c5695c1761303ef727.png?width=800)
モートン順序 ⇔ 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))
この記事が気に入ったらサポートをしてみませんか?