public override Point Fun(Point p)
        {
            var n2 = p.Y * p.Y + p.X * p.X + 1.0;
            var n3 = 2.0 * p.X;
            var n4 = (VariationHelper.SqrtSafe(n2 + n3) + VariationHelper.SqrtSafe(n2 - n3)) * 0.5;

            if (n4 < 1.0)
            {
                n4 = 1.0;
            }

            var acosh = VariationHelper.Acosh(n4);
            var n5    = p.X / n4;

            if (n5 > 1.0)
            {
                n5 = 1.0;
            }
            else if (n5 < -1.0)
            {
                n5 = -1.0;
            }

            var acos = Math.Acos(n5);

            if (p.Y < 0.0)
            {
                acos *= -1.0;
            }

            var n6   = acos + acosh * _out + _in / acosh;
            var sinh = Math.Sinh(acosh);
            var cosh = Math.Cosh(acosh);
            var sin  = Math.Sin(n6);
            var x    = W * cosh * Math.Cos(n6);
            var y    = W * sinh * sin;


            return(new Point(x, y));
        }