UNPKG

cesium

Version:

Cesium is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.

76 lines (68 loc) 2.45 kB
/*global define*/ define([ './Cartesian3', './defaultValue', './defined', './DeveloperError' ], function( Cartesian3, defaultValue, defined, DeveloperError) { 'use strict'; /** * Represents a ray that extends infinitely from the provided origin in the provided direction. * @alias Ray * @constructor * * @param {Cartesian3} [origin=Cartesian3.ZERO] The origin of the ray. * @param {Cartesian3} [direction=Cartesian3.ZERO] The direction of the ray. */ function Ray(origin, direction) { direction = Cartesian3.clone(defaultValue(direction, Cartesian3.ZERO)); if (!Cartesian3.equals(direction, Cartesian3.ZERO)) { Cartesian3.normalize(direction, direction); } /** * The origin of the ray. * @type {Cartesian3} * @default {@link Cartesian3.ZERO} */ this.origin = Cartesian3.clone(defaultValue(origin, Cartesian3.ZERO)); /** * The direction of the ray. * @type {Cartesian3} */ this.direction = direction; } /** * Computes the point along the ray given by r(t) = o + t*d, * where o is the origin of the ray and d is the direction. * * @param {Ray} ray The ray. * @param {Number} t A scalar value. * @param {Cartesian3} [result] The object in which the result will be stored. * @returns {Cartesian3} The modified result parameter, or a new instance if none was provided. * * @example * //Get the first intersection point of a ray and an ellipsoid. * var intersection = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid); * var point = Cesium.Ray.getPoint(ray, intersection.start); */ Ray.getPoint = function(ray, t, result) { //>>includeStart('debug', pragmas.debug); if (!defined(ray)){ throw new DeveloperError('ray is requred'); } if (typeof t !== 'number') { throw new DeveloperError('t is a required number'); } //>>includeEnd('debug'); if (!defined(result)) { result = new Cartesian3(); } result = Cartesian3.multiplyByScalar(ray.direction, t, result); return Cartesian3.add(ray.origin, result, result); }; return Ray; });