public virtual Direction <TAlgebraicNumber> FromDouble(Direction <double> direction)
        {
            if (direction is null)
            {
                throw new ArgumentNullException(nameof(direction));
            }

            return(AlgebraicNumberFactory.CreateDirection(FromDouble(direction.X), FromDouble(direction.Y)));
        }
        public virtual Point <TAlgebraicNumber> FromDouble(Point <double> point)
        {
            if (point is null)
            {
                throw new ArgumentNullException(nameof(point));
            }

            return(AlgebraicNumberFactory.CreatePoint(FromDouble(point.X), FromDouble(point.Y)));
        }
        public virtual DirectionRange <TAlgebraicNumber> FromDouble(DirectionRange <double> range)
        {
            if (range is null)
            {
                throw new ArgumentNullException(nameof(range));
            }

            return(AlgebraicNumberFactory.CreateDirectionRange(
                       FromDouble(range.Start),
                       FromDouble(range.End),
                       range.Orientation));
        }