/// <summary> /// /// </summary> /// <param name="point"></param> /// <param name="start"></param> /// <param name="axis"></param> /// <param name="radius"></param> /// <returns></returns> public static double Capsule(Vector3d point, Vector3d start, Vector3d axis, double radius) { var d = point - start; var t = SlurMath.Saturate(Vector3d.Dot(d, axis) / axis.SquareLength); return((d - axis * t).Length - radius); }
/// <summary> /// /// </summary> /// <param name="point"></param> /// <param name="start"></param> /// <param name="end"></param> /// <param name="radius"></param> /// <returns></returns> public static double Capsule(Vec3d point, Vec3d start, Vec3d end, double radius) { var d0 = point - start; var d1 = end - start; var t = SlurMath.Saturate(Vec3d.Dot(d0, d1) / d1.SquareLength); return((d0 - d1 * t).Length - radius); }
/// <summary> /// /// </summary> /// <param name="weight"></param> /// <returns></returns> public float ToScale(float weight) { var t = SlurMath.Saturate(SlurMath.Normalize(weight, _weight0, _weight1)); return(SlurMath.Lerp(_scale0, _scale1, t)); }