Template
36 lines
883 B
C#
36 lines
883 B
C#
|
|||
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Text;
|
||
|
|
|
||
|
|
namespace FireTools {
|
||
|
|
public static class SpaceFillingCurve {
|
||
|
|
public static int Morton2D(int t, int sx, int sy) {
|
||
|
|
int num1;
|
||
|
|
int num2 = num1 = 1;
|
||
|
|
int num3 = t;
|
||
|
|
int num4 = sx;
|
||
|
|
int num5 = sy;
|
||
|
|
int num6 = 0;
|
||
|
|
int num7 = 0;
|
||
|
|
|
||
|
|
while (num4 > 1 || num5 > 1) {
|
||
|
|
if (num4 > 1) {
|
||
|
|
num6 += num2 * (num3 & 1);
|
||
|
|
num3 >>= 1;
|
||
|
|
num2 *= 2;
|
||
|
|
num4 >>= 1;
|
||
|
|
}
|
||
|
|
if (num5 > 1) {
|
||
|
|
num7 += num1 * (num3 & 1);
|
||
|
|
num3 >>= 1;
|
||
|
|
num1 *= 2;
|
||
|
|
num5 >>= 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return num7 * sx + num6;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|