/// <summary>
        /// Return normalized vector of v multiplied by a scalar
        /// </summary>
        /// <param name="point">Vector</param>
        /// <returns></returns>
        public static I2dCartesianCoordinates <double> Normalize(I2dCartesianCoordinates <double> point, double scalar = 1.0)
        {
            var norm = Norm(point);
            var p    = new Point2d();

            if (norm > 0)
            {
                p.SetCartesian(scalar * point.X / norm, scalar * point.Y / norm);
            }
            return(p);
        }
 public void SetCartesian(I2dCartesianCoordinates <double> p)
 {
     X = p.X; Y = p.Y; Z = 0.0;
 }
        /// <summary>
        /// Return the cross product: v1 x v2
        /// </summary>
        /// <param name="v1">2d vector</param>
        /// <param name="v2">2d vector</param>
        public static I3dCartesianCoordinates <double> CrossProduct(I2dCartesianCoordinates <double> v1, I2dCartesianCoordinates <double> v2)
        {
            var Z = (v1.X * v2.Y) - (v1.Y * v2.X);

            return(new Point3d(0.0, 0.0, Z));
        }
 public Point2d(I2dCartesianCoordinates <double> p)
 {
     SetCartesian(p);
 }