# IntersectionTests

engine/Source/Core/IntersectionTests.js 12
Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids.

### Methods

#### static Cesium.IntersectionTests.grazingAltitudeLocation(ray, ellipsoid) → Cartesian3
engine/Source/Core/IntersectionTests.js 744

Provides the point along the ray which is nearest to the ellipsoid.

Name | Type | Description
--- | --- | ---
`ray` | Ray | The ray.
`ellipsoid` | Ellipsoid | The ellipsoid.

##### Returns:

The nearest planetodetic point on the ray.

#### static Cesium.IntersectionTests.lineSegmentPlane(endPoint0, endPoint1, plane, result) → Cartesian3
engine/Source/Core/IntersectionTests.js 897

Computes the intersection of a line segment and a plane.

Name | Type | Description
--- | --- | ---
`endPoint0` | Cartesian3 | An end point of the line segment.
`endPoint1` | Cartesian3 | The other end point of the line segment.
`plane` | Plane | The plane.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The intersection point or undefined if there is no intersection.

##### Example:

    const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);
    const normal = ellipsoid.geodeticSurfaceNormal(origin);
    const plane = Cesium.Plane.fromPointNormal(origin, normal);

    const p0 = new Cesium.Cartesian3(...);
    const p1 = new Cesium.Cartesian3(...);

    // find the intersection of the line segment from p0 to p1 and the tangent plane at origin.
    const intersection = Cesium.IntersectionTests.lineSegmentPlane(p0, p1, plane);

#### static Cesium.IntersectionTests.lineSegmentSphere(p0, p1, sphere, result) → Interval
engine/Source/Core/IntersectionTests.js 380

Computes the intersection points of a line segment with a sphere.

Name | Type | Description
--- | --- | ---
`p0` | Cartesian3 | An end point of the line segment.
`p1` | Cartesian3 | The other end point of the line segment.
`sphere` | BoundingSphere | The sphere.
`result` | Interval | optional The result onto which to store the result.

##### Returns:

The interval containing scalar points along the ray or undefined if there are no intersections.

#### static Cesium.IntersectionTests.lineSegmentTriangle(v0, v1, p0, p1, p2, cullBackFaces, result) → Cartesian3
engine/Source/Core/IntersectionTests.js 227

Computes the intersection of a line segment and a triangle.

Name | Type | Default | Description
--- | --- | --- | ---
`v0` | Cartesian3 |  | The an end point of the line segment.
`v1` | Cartesian3 |  | The other end point of the line segment.
`p0` | Cartesian3 |  | The first vertex of the triangle.
`p1` | Cartesian3 |  | The second vertex of the triangle.
`p2` | Cartesian3 |  | The third vertex of the triangle.
`cullBackFaces` | boolean | `false` | optional If `true`, will only compute an intersection with the front face of the triangle and return undefined for intersections with the back face.
`result` | Cartesian3 |  | optional The `Cartesian3` onto which to store the result.

##### Returns:

The intersection point or undefined if there is no intersections.

#### static Cesium.IntersectionTests.rayAxisAlignedBoundingBox(ray, box, result)
engine/Source/Core/IntersectionTests.js 509

Computes the intersection points of a ray with an axis-aligned bounding box. (axis-aligned in the same space as the ray)

Name | Type | Description
--- | --- | ---
`ray` | Ray | The ray.
`box` | AxisAlignedBoundingBox | The axis-aligned bounding box.
`result` | Interval | undefined | The interval containing scalar points along the ray or undefined if there are no intersections.

#### static Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid) → Interval
engine/Source/Core/IntersectionTests.js 420

Computes the intersection points of a ray with an ellipsoid.

Name | Type | Description
--- | --- | ---
`ray` | Ray | The ray.
`ellipsoid` | Ellipsoid | The ellipsoid.

##### Returns:

The interval containing scalar points along the ray or undefined if there are no intersections.

#### static Cesium.IntersectionTests.rayPlane(ray, plane, result) → Cartesian3
engine/Source/Core/IntersectionTests.js 27

Computes the intersection of a ray and a plane.

Name | Type | Description
--- | --- | ---
`ray` | Ray | The ray.
`plane` | Plane | The plane.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The intersection point or undefined if there is no intersections.

#### static Cesium.IntersectionTests.raySphere(ray, sphere, result) → Interval
engine/Source/Core/IntersectionTests.js 349

Computes the intersection points of a ray with a sphere.

Name | Type | Description
--- | --- | ---
`ray` | Ray | The ray.
`sphere` | BoundingSphere | The sphere.
`result` | Interval | optional The result onto which to store the result.

##### Returns:

The interval containing scalar points along the ray or undefined if there are no intersections.

#### static Cesium.IntersectionTests.rayTriangle(ray, p0, p1, p2, cullBackFaces, result) → Cartesian3
engine/Source/Core/IntersectionTests.js 184

Computes the intersection of a ray and a triangle as a Cartesian3 coordinate. Implements Fast Minimum Storage Ray/Triangle Intersection by Tomas Moller and Ben Trumbore.

Name | Type | Default | Description
--- | --- | --- | ---
`ray` | Ray |  | The ray.
`p0` | Cartesian3 |  | The first vertex of the triangle.
`p1` | Cartesian3 |  | The second vertex of the triangle.
`p2` | Cartesian3 |  | The third vertex of the triangle.
`cullBackFaces` | boolean | `false` | optional If `true`, will only compute an intersection with the front face of the triangle and return undefined for intersections with the back face.
`result` | Cartesian3 |  | optional The `Cartesian3` onto which to store the result.

##### Returns:

The intersection point or undefined if there is no intersections.

#### static Cesium.IntersectionTests.rayTriangleParametric(ray, p0, p1, p2, cullBackFaces) → number
engine/Source/Core/IntersectionTests.js 83

Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray. Implements Fast Minimum Storage Ray/Triangle Intersection by Tomas Moller and Ben Trumbore.

Name | Type | Default | Description
--- | --- | --- | ---
`ray` | Ray |  | The ray.
`p0` | Cartesian3 |  | The first vertex of the triangle.
`p1` | Cartesian3 |  | The second vertex of the triangle.
`p2` | Cartesian3 |  | The third vertex of the triangle.
`cullBackFaces` | boolean | `false` | optional If `true`, will only compute an intersection with the front face of the triangle and return undefined for intersections with the back face.

##### Returns:

The intersection as a parametric distance along the ray, or undefined if there is no intersection.

#### static Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane) → object
engine/Source/Core/IntersectionTests.js 967

Computes the intersection of a triangle and a plane

Name | Type | Description
--- | --- | ---
`p0` | Cartesian3 | First point of the triangle
`p1` | Cartesian3 | Second point of the triangle
`p2` | Cartesian3 | Third point of the triangle
`plane` | Plane | Intersection plane

##### Returns:

An object with properties `positions` and `indices`, which are arrays that represent three triangles that do not cross the plane. (Undefined if no intersection exists)

##### Example:

    const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);
    const normal = ellipsoid.geodeticSurfaceNormal(origin);
    const plane = Cesium.Plane.fromPointNormal(origin, normal);

    const p0 = new Cesium.Cartesian3(...);
    const p1 = new Cesium.Cartesian3(...);
    const p2 = new Cesium.Cartesian3(...);

    // convert the triangle composed of points (p0, p1, p2) to three triangles that don't cross the plane
    const triangles = Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane);

Need help? The fastest way to get answers is from the community and team on the Cesium Forum.