public static void MoveWithMouseWheel(this PerspectiveCamera camera, double delta, Point3D center)
        {
            delta = camera.GetRadius() / 10 * (delta > 0 ? 1 : -1);
            double k = Math.Max(Math.Abs(camera.Position.X),
                                Math.Max(Math.Abs(camera.Position.Y), Math.Abs(camera.Position.Z)));

            Point3D newPosition = new Point3D(camera.LookDirection.X * delta / k + camera.Position.X,
                                              camera.LookDirection.Y * delta / k + camera.Position.Y,
                                              camera.LookDirection.Z * delta / k + camera.Position.Z);

            double r = Math.Sqrt(Math.Pow(newPosition.X - center.X, 2) +
                                 Math.Pow(newPosition.Y - center.Y, 2) +
                                 Math.Pow(newPosition.Z - center.Z, 2));

            if (r > 1)
            {
                camera.LookDirection = (camera.Position + camera.LookDirection) - newPosition;
                camera.Position      = newPosition;
                camera.UpDirection   = new Vector3D(0, 0, 1);
            }
        }