public vec3 GetPosition(double u, double v)
{
double sinU = Math.Sin(u), cosU = Math.Cos(u);
double sinV = Math.Sin(v), cosV = Math.Cos(v);
double x = -2.0 * cosU * (3 * cosV - 30 * sinU + 90 * Math.Pow(cosU, 4) * sinU - 60 * Math.Pow(cosU, 6) * sinU + 5 * cosU * cosV * sinU);
double y = -1.0 * sinU * (3 * cosV - 3 * Math.Pow(cosU, 2) * cosV - 48 * Math.Pow(cosU, 4) * cosV + 48 * Math.Pow(cosU, 6) * cosV - 60 * sinU + 5 * cosU * cosV * sinU - 5 * Math.Pow(cosU, 3) * cosV * sinU - 80 * Math.Pow(cosU, 5) * cosV * sinU + 80 * Math.Pow(cosU, 7) * cosV * sinU);
double z = 2.0 * (3.0 + 5 * cosU * sinU) * sinV;
return new vec3((float)x, (float)y, (float)z);
}