public static T Distance <T>(T dp, T sd) where T : IVector, new() { double lp = VecX.Project01(dp, sd); lp = MathX.Clamp(lp, 0.0, 1.0); return(VecX.Sub(dp, VecX.Mul(sd, lp))); }
public static Vec3 Distance(Vec3 dp, Vec3 sd) { double lp = VecX.Project01(dp, sd); lp = MathX.Clamp(lp, 0.0, 1.0); return(dp - lp * sd); }
public static T Clamp <T>(T v, T min, T max) where T : IVector, new() { T nv = new T(); int dim = nv.Dimension; for (int i = 0; i < dim; i++) { nv[i] = MathX.Clamp(v[i], min[i], max[i]); } return(nv); }