# Vector2.Barycentric Method (Vector2, Vector2, Vector2, Single, Single)

**XNA Game Studio 2.0**

**Namespace: **Microsoft.Xna.Framework**Assembly: **Microsoft.Xna.Framework (in microsoft.xna.framework.dll)

public static Vector2 Barycentric ( Vector2 value1, Vector2 value2, Vector2 value3, float amount1, float amount2 )

#### Parameters

*value1*- A Vector2 containing the 2D Cartesian coordinates of vertex 1 of the triangle.
*value2*- A Vector2 containing the 2D Cartesian coordinates of vertex 2 of the triangle.
*value3*- A Vector2 containing the 2D Cartesian coordinates of vertex 3 of the triangle.
*amount1*- Barycentric coordinate
**b2**, which expresses the weighting factor toward vertex 2 (specified in*value2*). *amount2*- Barycentric coordinate
**b3**, which expresses the weighting factor toward vertex 3 (specified in*value3*).

#### Return Value

## About Barycentric Coordinates

Given a triangle with vertices **V1**, **V2**, and **V3**, any point **P** on the plane of that triangle can be specified by three weighting factors **b1**, **b2**, and **b3**, each of which indicates how much relative influence the corresponding triangle vertex contributes to the location of the point, as specified in the following formulas.

Px = (b1 * V1x) + (b2 * V2x) + (b3 * V3x); Py = (b1 * V1y) + (b2 * V2y) + (b3 * V3y);

Such triple weighting factors **b1**, **b2**, and **b3** are called *barycentric coordinates*.

Barycentric coordinates express relative weights, meaning that **(k * b1)**, **(k * b2)**, and **(k * b3)** are also coordinates of the same point as **b1**, **b2**, and **b3** for any positive value of **k**.

If a set of barycentric coordinates is normalized so that **b1 + b2 + b3 = 1**, the resulting coordinates are unique for the point in question, and are known as *areal* coordinates. When normalized in this way, only two coordinates are needed, say **b2** and **b3**, since **b1** equals **(1** − **b2** − **b3)**.

## What Vector2 Barycentric Does

The **Vector2** Barycentric method takes three vectors specifying the Cartesian coordinates of the triangle vertices, **V1**, **V2**, and **V3**), and two areal coordinates **b2** and **b3** of some point **P** (**b2** is the *amount1* argument, and **b3** is the *amount2* argument). The **b2** coordinate relates to vertex **V2**, and the **b3**coordinate relates to **V3**.

Barycentric then calculates the Cartesian coordinate of **P** as follows:

Px = ( (1 - b2 - b3) * V1x ) + (b2 * V2x) + (b3 * V3x); Py = ( (1 - b2 - b3) * V1y ) + (b2 * V2y) + (b3 * V3y);

Thus, to calculate the 2D Cartesian coordinates of **P**, you would pass the coordinates of the triangle vertices to Barycentric together with the appropropriate normalized barycentric coordinates of **P**.

The following relationships may be useful.

- If ( (
*amount1*<= 0) and (*amount2*>= 0) and (1 −*amount1*−*amount2*>= 0) ), then the point is inside the triangle defined by*value1*,*value2*, and*value3*. - If ( (
*amount1*== 0) and (*amount2*>= 0) and (1 −*amount1*−*amount2*>= 0) ), then the point is on the line defined by*value1*and*value3*. - If ( (
*amount1*>= 0) and (*amount2*== 0) and (1 −*amount1*−*amount2*>= 0) ), then the point is on the line defined by*value1*and*value2*. - If ( (
*amount1*>= 0) and (*amount2*>= 0) and (1 −*amount1*−*amount2*== 0) ), then the point is on the line defined by*value2*and*value3*.

Barycentric coordinates are a form of general coordinates. In this context, using barycentric coordinates represents a change in coordinate systems. What holds true for Cartesian coordinates holds true for barycentric coordinates.