# IntersectionTests

Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids.

### Methods

#### staticIntersectionTests.grazingAltitudeLocation(ray, ellipsoid) → Cartesian

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.

#### staticIntersectionTests.lineSegmentPlane(endPoint0, endPoint1, plane, result) → Cartesian3

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:
``````var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);
var normal = ellipsoid.geodeticSurfaceNormal(origin);
var plane = Cesium.Plane.fromPointNormal(origin, normal);

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

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

#### staticIntersectionTests.lineSegmentSphere(p0, p1, sphere, result) → Object

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` Object optional The result onto which to store the result.
##### Returns:
An object with the first (`start`) and the second (`stop`) intersection scalars for points along the line segment or undefined if there are no intersections.

#### staticIntersectionTests.lineSegmentTriangle(v0, v1, p0, p1, p2, cullBackFaces, result) → Cartesian3

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.

#### staticIntersectionTests.rayEllipsoid(ray, ellipsoid) → Object

Computes the intersection points of a ray with an ellipsoid.
Name Type Description
`ray` Ray The ray.
`ellipsoid` Ellipsoid The ellipsoid.
##### Returns:
An object with the first (`start`) and the second (`stop`) intersection scalars for points along the ray or undefined if there are no intersections.

#### staticIntersectionTests.rayPlane(ray, plane, result) → Cartesian3

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.

#### staticIntersectionTests.raySphere(ray, sphere, result) → Object

Computes the intersection points of a ray with a sphere.
Name Type Description
`ray` Ray The ray.
`sphere` BoundingSphere The sphere.
`result` Object optional The result onto which to store the result.
##### Returns:
An object with the first (`start`) and the second (`stop`) intersection scalars for points along the ray or undefined if there are no intersections.

#### staticIntersectionTests.rayTriangle(ray, p0, p1, p2, cullBackFaces, result) → Cartesian3

Computes the intersection of a ray and a triangle.
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.

#### staticIntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane) → Object

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:
``````var origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);
var normal = ellipsoid.geodeticSurfaceNormal(origin);
var plane = Cesium.Plane.fromPointNormal(origin, normal);

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

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