public FLOAT Curvature(FLOAT t)
        {
            var T = Derivative(t);
            var N = SecondDerivative(t);

            return(VectorHelper.Cross(T, N).magnitude / (T.magnitude * T.sqrMagnitude));
        }
 public VECTOR Normal(FLOAT t)
 {
     try
     {
         var T1 = Derivative(t - 1e-4f);
         var T2 = Derivative(t + 1e-4f);
         var c  = VectorHelper.Cross(T1 / VectorHelper.Length(T1), T2 / VectorHelper.Length(T2));
         var N  = VectorHelper.Cross(c, T1 / VectorHelper.Length(T1));
         return(N / VectorHelper.Length(N));
     }
     catch (DivideByZeroException e)
     {
         UnityEngine.Debug.Log(e.Message);
         return(UnityEngine.Vector3.right);
     }
 }
 public VECTOR Binormal(FLOAT t)
 {
     return(VectorHelper.Normalize(VectorHelper.Cross(Tangent(t), Normal(t))));
 }