Exemple #1
0
        /// <summary>
        /// Evaluates position and tangent on the spline using curve distance from the start. Valid length is [0..TotalLength].
        /// Caller must ensure that spline is valid before calling this method!
        /// </summary>
        public void EvalPositionTangentParametrized(float length, out PositionTangent positionTangent)
        {
            int   i;
            float t;

            GetSegmentIndexAndTime(_parametrization.GetApproximateTimeParameter(length), out i, out t);
            ItemData segment = _data[i];

            positionTangent.Position = segment.EvalPosition(t);
            positionTangent.Tangent  = segment.EvalTangent(t);
        }
Exemple #2
0
        /// <summary>
        /// Evaluates position and tangent on the spline. Valid time is [0..1],
        /// where 0 is spline first point, 1 - spline end point.
        /// Caller must ensure that spline is valid before calling this method!
        /// </summary>
        public void EvalPositionTangent(float time, out PositionTangent positionTangent)
        {
            int   i;
            float t;

            GetSegmentIndexAndTime(time, out i, out t);
            ItemData segment = _data[i];

            positionTangent.Position = segment.EvalPosition(t);
            positionTangent.Tangent  = segment.EvalTangent(t);
        }
Exemple #3
0
        /// <summary>
        /// Evaluates position and tangent on the spline using curve distance from the start. Valid length is [0..TotalLength].
        /// Caller must ensure that spline is valid before calling this method!
        /// </summary>
        public PositionTangent EvalPositionTangentParametrized(float length)
        {
            int   i;
            float t;

            GetSegmentIndexAndTime(_parametrization.GetApproximateTimeParameter(length), out i, out t);
            ItemData        segment = _data[i];
            PositionTangent result;

            result.Position = segment.EvalPosition(t);
            result.Tangent  = segment.EvalTangent(t);
            return(result);
        }
Exemple #4
0
        /// <summary>
        /// Evaluates position and tangent on the spline. Valid time is [0..1],
        /// where 0 is spline first point, 1 - spline end point.
        /// Caller must ensure that spline is valid before calling this method!
        /// </summary>
        public PositionTangent EvalPositionTangent(float time)
        {
            int   i;
            float t;

            GetSegmentIndexAndTime(time, out i, out t);
            ItemData        segment = _data[i];
            PositionTangent result;

            result.Position = segment.EvalPosition(t);
            result.Tangent  = segment.EvalTangent(t);
            return(result);
        }
Exemple #5
0
        /// <summary>
        /// Evaluates Frenet frame on the spline using curve distance from the start. Valid length is [0..TotalLength].
        /// Caller must ensure that spline is valid before calling this method!
        /// </summary>
        public void EvalFrameParametrized(float length, out CurveFrame frame)
        {
            int   i;
            float t;

            GetSegmentIndexAndTime(_parametrization.GetApproximateTimeParameter(length), out i, out t);
            ItemData segment = _data[i];

            frame.Position = segment.EvalPosition(t);
            Vector3 velocity     = segment.EvalFirstDerivative(t);
            Vector3 acceleration = segment.EvalSecondDerivative(t);
            float   VDotV        = velocity.Dot(velocity);
            float   VDotA        = velocity.Dot(acceleration);

            frame.Normal = VDotV * acceleration - VDotA * velocity;
            frame.Normal.Normalize();
            frame.Tangent = velocity;
            frame.Tangent.Normalize();
            frame.Binormal = frame.Tangent.Cross(frame.Normal);
        }