# Curve Class

Stores an arbitrary collection of 2D CurveKey points, and provides methods for evaluating features of the curve they define.

**Namespace:**Microsoft.Xna.Framework

**Assembly:**Microsoft.Xna.Framework.Math (in Microsoft.Xna.Framework.Math.dll)

The Curve type exposes the following members.

Name | Description | |
---|---|---|

IsConstant | Gets a value indicating whether the curve is constant. | |

Keys | The points that make up the curve. | |

PostLoop | Specifies how to handle weighting values that are greater than the last control point in the curve. | |

PreLoop | Specifies how to handle weighting values that are less than the first control point in the curve. |

Name | Description | |
---|---|---|

Clone | Creates a copy of the Curve. | |

ComputeTangent(Int32, CurveTangent) | Computes both the TangentIn and the TangentOut for a CurveKey specified by its index. | |

ComputeTangent(Int32, CurveTangent, CurveTangent) | Computes a specified type of TangentIn and a specified type of TangentOut for a given CurveKey. | |

ComputeTangents(CurveTangent) | Computes all tangents for all CurveKeys in this Curve, using a specified tangent type for both TangentIn and TangentOut. | |

ComputeTangents(CurveTangent, CurveTangent) | Computes all tangents for all CurveKeys in this Curve, using different tangent types for TangentOut and TangentIn. | |

Evaluate | Finds the value at a position on the Curve. |

The Curve class describes how two float values vary with respect to each other even when you cannot easily define their relationship by a formula. Instead, the relationship is defined by an ordered set of value pairs that exemplify it.

You specify a Curve by adding a sequence of CurveKey objects to its Keys collection, each of which must contain at minimum a Position greater than that of the preceding CurveKey, and a corresponding Value. In practice, the Position is almost always used to represent a point in time, while the Value property generally represents a coordinate value corresponding to that point in time.

To represent a time path in two or three dimensions, you can define two or three Curve objects, each of which corresponds to a different spatial axis. Coordinates of a given time's point on the resulting 2D or 3D curve are calculated very efficiently.

The Curve.Evaluate method returns a (coordinate) value corresponding to a (time) position that you specify. The position doesn't have to be contained in any of the CurveKey points, because Curve interpolates between points depending on the CurveKey characteristics you have defined.

Not only is Curve useful for controlling animation and spatial motion, it can also be used anywhere you want to define a response that changes over time. For example, if you are using a button to accelerate a car in your game, you might want to define a complex velocity curve that varies with how long the button is held down to simulate gear shifts.

A CurveKey point need not always be part of a smoothly varying curve; you can also set a CurveKey to represent a step or sharp inflection point.

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.