when aggressive isn't aggressive enough
when aggressive isn't aggressive enough


Vector3 / float is a very common pattern and useless with most integer valuesSqrt(-1.0f) produces NaN, but it would have to throw for integerDistance depends on if it's something like straight line distance or notVector represents what is functionally a magnitude (length) + directionVector and Point can be usefulVector is largely only beneficial with floating-point, due to the operations it has to supportPoint (or Coordinate or ...) are less mathematical and can have core functionality filled in nicely stillVector2<T> where T : IFloatingPoint<T>Point2<T> where T : INumber<T>Point2<int> -> Vector2<float> for examplevector is that it has a lengthlength, you don't have a vectorPoint/CoordinateVector<T> and so must support any Vector<T>, which means it might be lossless.AsVector3() (or some qualified name that disambiguates here)
Vector3 / floatSqrt(-1.0f)NaNDistanceVectorVectorVectorPointPointPointCoordinateCoordinateVector2<T> where T : IFloatingPoint<T>Point2<T> where T : INumber<T>Point2<int> -> Vector2<float>vectorlengthlengthVector<T>Vector<T>.AsVector3()