# Triangle

A geometric triangle as defined by three vectors representing its three corners.

## Constructor

### new Triangle ( a : Vector3, b : Vector3, c : Vector3 )

Constructs a new triangle.

a | The first corner of the triangle. Default is `(0,0,0)`.
b | The second corner of the triangle. Default is `(0,0,0)`.
c | The third corner of the triangle. Default is `(0,0,0)`.

## Properties

### .a : Vector3

The first corner of the triangle.

### .b : Vector3

The second corner of the triangle.

### .c : Vector3

The third corner of the triangle.

## Methods

### .clone () : Triangle

Returns a new triangle with copied values from this instance.

Returns: A clone of this instance.

### .closestPointToPoint ( p : Vector3, target : Vector3 ) : Vector3

Returns the closest point on the triangle to the given point.

p | The point to compute the closest point for.
target | The target vector that is used to store the method's result.

Returns: The closest point on the triangle.

### .containsPoint ( point : Vector3 ) : boolean

Returns `true` if the given point, when projected onto the plane of the triangle, lies within the triangle.

point | The point in 3D space to test.

Returns: Whether the given point, when projected onto the plane of the triangle, lies within the triangle or not.

### .copy ( triangle : Triangle ) : Triangle

Copies the values of the given triangle to this instance.

triangle | The triangle to copy.

Returns: A reference to this triangle.

### .equals ( triangle : Triangle ) : boolean

Returns `true` if this triangle is equal with the given one.

triangle | The triangle to test for equality.

Returns: Whether this triangle is equal with the given one.

### .getArea () : number

Computes the area of the triangle.

Returns: The triangle's area.

### .getBarycoord ( point : Vector3, target : Vector3 ) : Vector3

Computes a barycentric coordinates from the given vector. Returns `null` if the triangle is degenerate.

point | A point in 3D space.
target | The target vector that is used to store the method's result.

Returns: The barycentric coordinates for the given point

### .getInterpolation ( point : Vector3, v1 : Vector3, v2 : Vector3, v3 : Vector3, target : Vector3 ) : Vector3

Computes the value barycentrically interpolated for the given point on the triangle. Returns `null` if the triangle is degenerate.

point | Position of interpolated point.
v1 | Value to interpolate of first vertex.
v2 | Value to interpolate of second vertex.
v3 | Value to interpolate of third vertex.
target | The target vector that is used to store the method's result.

Returns: The interpolated value.

### .getMidpoint ( target : Vector3 ) : Vector3

Computes the midpoint of the triangle.

target | The target vector that is used to store the method's result.

Returns: The triangle's midpoint.

### .getNormal ( target : Vector3 ) : Vector3

Computes the normal of the triangle.

target | The target vector that is used to store the method's result.

Returns: The triangle's normal.

### .getPlane ( target : Plane ) : Plane

Computes a plane the triangle lies within.

target | The target vector that is used to store the method's result.

Returns: The plane the triangle lies within.

### .intersectsBox ( box : Box3 ) : boolean

Returns `true` if this triangle intersects with the given box.

box | The box to intersect.

Returns: Whether this triangle intersects with the given box or not.

### .isFrontFacing ( direction : Vector3 ) : boolean

Returns `true` if the triangle is oriented towards the given direction.

direction | The (normalized) direction vector.

Returns: Whether the triangle is oriented towards the given direction or not.

### .set ( a : Vector3, b : Vector3, c : Vector3 ) : Triangle

Sets the triangle's vertices by copying the given values.

a | The first corner of the triangle.
b | The second corner of the triangle.
c | The third corner of the triangle.

Returns: A reference to this triangle.

### .setFromAttributeAndIndices ( attribute : BufferAttribute, i0 : number, i1 : number, i2 : number ) : Triangle

Sets the triangle's vertices by copying the given attribute values.

attribute | A buffer attribute with 3D points data.
i0 | The attribute index representing the first corner of the triangle.
i1 | The attribute index representing the second corner of the triangle.
i2 | The attribute index representing the third corner of the triangle.

Returns: A reference to this triangle.

### .setFromPointsAndIndices ( points : Array.<Vector3>, i0 : number, i1 : number, i2 : number ) : Triangle

Sets the triangle's vertices by copying the given array values.

points | An array with 3D points.
i0 | The array index representing the first corner of the triangle.
i1 | The array index representing the second corner of the triangle.
i2 | The array index representing the third corner of the triangle.

Returns: A reference to this triangle.

## Static Methods

### .containsPoint ( point : Vector3, a : Vector3, b : Vector3, c : Vector3 ) : boolean

Returns `true` if the given point, when projected onto the plane of the triangle, lies within the triangle.

point | The point in 3D space to test.
a | The first corner of the triangle.
b | The second corner of the triangle.
c | The third corner of the triangle.

Returns: Whether the given point, when projected onto the plane of the triangle, lies within the triangle or not.

### .getBarycoord ( point : Vector3, a : Vector3, b : Vector3, c : Vector3, target : Vector3 ) : Vector3

Computes a barycentric coordinates from the given vector. Returns `null` if the triangle is degenerate.

point | A point in 3D space.
a | The first corner of the triangle.
b | The second corner of the triangle.
c | The third corner of the triangle.
target | The target vector that is used to store the method's result.

Returns: The barycentric coordinates for the given point

### .getInterpolatedAttribute ( attr : BufferAttribute, i1 : number, i2 : number, i3 : number, barycoord : Vector3, target : Vector3 ) : Vector3

Computes the value barycentrically interpolated for the given attribute and indices.

attr | The attribute to interpolate.
i1 | Index of first vertex.
i2 | Index of second vertex.
i3 | Index of third vertex.
barycoord | The barycoordinate value to use to interpolate.
target | The target vector that is used to store the method's result.

Returns: The interpolated attribute value.

### .getInterpolation ( point : Vector3, p1 : Vector3, p2 : Vector3, p3 : Vector3, v1 : Vector3, v2 : Vector3, v3 : Vector3, target : Vector3 ) : Vector3

Computes the value barycentrically interpolated for the given point on the triangle. Returns `null` if the triangle is degenerate.

point | Position of interpolated point.
p1 | The first corner of the triangle.
p2 | The second corner of the triangle.
p3 | The third corner of the triangle.
v1 | Value to interpolate of first vertex.
v2 | Value to interpolate of second vertex.
v3 | Value to interpolate of third vertex.
target | The target vector that is used to store the method's result.

Returns: The interpolated value.

### .getNormal ( a : Vector3, b : Vector3, c : Vector3, target : Vector3 ) : Vector3

Computes the normal vector of a triangle.

a | The first corner of the triangle.
b | The second corner of the triangle.
c | The third corner of the triangle.
target | The target vector that is used to store the method's result.

Returns: The triangle's normal.

### .isFrontFacing ( a : Vector3, b : Vector3, c : Vector3, direction : Vector3 ) : boolean

Returns `true` if the triangle is oriented towards the given direction.

a | The first corner of the triangle.
b | The second corner of the triangle.
c | The third corner of the triangle.
direction | The (normalized) direction vector.

Returns: Whether the triangle is oriented towards the given direction or not.

## Source

src/math/Triangle.js