Microsoft DirectX 9.0 SDK Update (October 2004)

Vector3.Hermite Method

Language:

Note: This documentation is preliminary and is subject to change.

Performs a Hermite spline interpolation using the specified 3-D vectors.

Definition

Visual Basic .NET Public Shared Function Hermite( _
    ByVal position As Vector3, _
    ByVal tangent As Vector3, _
    ByVal position2 As Vector3, _
    ByVal tangent2 As Vector3, _
    ByVal weightingFactor As Single _
) As Vector3
C# public static Vector3 Hermite(
    Vector3 position,
    Vector3 tangent,
    Vector3 position2,
    Vector3 tangent2,
    float weightingFactor
);
Managed C++ public: static Vector3 Hermite(
    Vector3 position,
    Vector3 tangent,
    Vector3 position2,
    Vector3 tangent2,
    float weightingFactor
);
JScript .NET public static function Hermite(
    position : Vector3,
    tangent : Vector3,
    position2 : Vector3,
    tangent2 : Vector3,
    weightingFactor : float
) : Vector3;

Parameters

position Microsoft.DirectX.Vector3. Source Vector3 structure that is a position vector.
tangent Microsoft.DirectX.Vector3. Source Vector3 structure that is a tangent vector.
position2 Microsoft.DirectX.Vector3. Source Vector3 structure that is a position vector.
tangent2 Microsoft.DirectX.Vector3. Source Vector3 structure that is a tangent vector.
weightingFactor System.Single. Weighting factor. See Remarks.

Return Value

Microsoft.DirectX.Vector3 . A Vector3 structure that is the result of the Hermite spline interpolation.

Remarks

The Hermite method interpolates from (position, tangent) to (position2, tangent2) using Hermite spline interpolation.

The spline interpolation is a generalization of the ease-in, ease-out spline. The ramp is a function of Q(s) with the following properties.

Q(s) = As3 + Bs2 + Cs + D (and therefore, Q'(s) = 3As2 + 2Bs + C)

a) Q(0) = v1, so Q'(0) = t1

b) Q(1) = v2, so Q'(1) = t2

In these properties, v1 is the contents of position, v2 is the contents of position2, t1 is the contents of tangent, t2 is the contents of tangent2, and s is the contents of weightingFactor.

These properties are used to solve for A, B, C, D in the following example.

D = v1  (from a)
C = t1  (from a)
3A + 2B = t2 - t-1 (substituting for C)
A + B = v2 - v1 - t1 (substituting for C and D)

To generate Q(s), pass in the solutions for A, B, C, and D as follows.

A = 2v1 - 2v2 + t2 + t1 
B = 3v2 - 3v1 - 2t1 - t2
C = t1 
D = v1

These properties yield the following:

Q(s) = (2v1 - 2v2 + t2 + t1)s3 + (3v2 - 3v1 - 2t1 - t2)s2 + t1s + v1.
Which can be rearranged as:
Q(s) = (2s3 - 3s2 + 1)v1 + (-2s3 + 3s2)v2 + (s3 - 2s2 + s)t1 + (s3 - s2)t2.

Hermite splines are useful for controlling animation because the curve runs through all of the control points. Also, because the position and tangent are explicitly specified at the ends of each segment, it is easy to create a continuous curve, provided that the starting position and tangent match the ending values of the last segment.


© 2004 Microsoft Corporation. All rights reserved. Terms of use.

Feedback? Please provide us with your comments on this topic.
For more help, visit the DirectX Developer Center