public static float SeamlessNoiseAbs(float x, float y, float dx, float dy, float xyOffset)
{
float s = x;
float t = y;
float nx = xyOffset + (float)Math.Cos(s * 2.0f * Math.PI) * dx / (float)(2.0f * Math.PI);
float ny = xyOffset + (float)Math.Cos(t * 2.0f * Math.PI) * dy / (float)(2.0f * Math.PI);
float nz = xyOffset + (float)Math.Sin(s * 2.0f * Math.PI) * dx / (float)(2.0f * Math.PI);
float nw = xyOffset + (float)Math.Sin(t * 2.0f * Math.PI) * dy / (float)(2.0f * Math.PI);
return (Noise(nx, ny, nz, nw) + 1.0f) * 0.5f;
}