Buckets:
| import { clamp } from './MathUtils.js'; | |
| /** | |
| * This class can be used to represent points in 3D space as | |
| * [Spherical coordinates]{@link https://en.wikipedia.org/wiki/Spherical_coordinate_system}. | |
| */ | |
| class Spherical { | |
| /** | |
| * Constructs a new spherical. | |
| * | |
| * @param {number} [radius=1] - The radius, or the Euclidean distance (straight-line distance) from the point to the origin. | |
| * @param {number} [phi=0] - The polar angle in radians from the y (up) axis. | |
| * @param {number} [theta=0] - The equator/azimuthal angle in radians around the y (up) axis. | |
| */ | |
| constructor( radius = 1, phi = 0, theta = 0 ) { | |
| /** | |
| * The radius, or the Euclidean distance (straight-line distance) from the point to the origin. | |
| * | |
| * @type {number} | |
| * @default 1 | |
| */ | |
| this.radius = radius; | |
| /** | |
| * The polar angle in radians from the y (up) axis. | |
| * | |
| * @type {number} | |
| * @default 0 | |
| */ | |
| this.phi = phi; | |
| /** | |
| * The equator/azimuthal angle in radians around the y (up) axis. | |
| * | |
| * @type {number} | |
| * @default 0 | |
| */ | |
| this.theta = theta; | |
| } | |
| /** | |
| * Sets the spherical components by copying the given values. | |
| * | |
| * @param {number} radius - The radius. | |
| * @param {number} phi - The polar angle. | |
| * @param {number} theta - The azimuthal angle. | |
| * @return {Spherical} A reference to this spherical. | |
| */ | |
| set( radius, phi, theta ) { | |
| this.radius = radius; | |
| this.phi = phi; | |
| this.theta = theta; | |
| return this; | |
| } | |
| /** | |
| * Copies the values of the given spherical to this instance. | |
| * | |
| * @param {Spherical} other - The spherical to copy. | |
| * @return {Spherical} A reference to this spherical. | |
| */ | |
| copy( other ) { | |
| this.radius = other.radius; | |
| this.phi = other.phi; | |
| this.theta = other.theta; | |
| return this; | |
| } | |
| /** | |
| * Restricts the polar angle [page:.phi phi] to be between `0.000001` and pi - | |
| * `0.000001`. | |
| * | |
| * @return {Spherical} A reference to this spherical. | |
| */ | |
| makeSafe() { | |
| const EPS = 0.000001; | |
| this.phi = clamp( this.phi, EPS, Math.PI - EPS ); | |
| return this; | |
| } | |
| /** | |
| * Sets the spherical components from the given vector which is assumed to hold | |
| * Cartesian coordinates. | |
| * | |
| * @param {Vector3} v - The vector to set. | |
| * @return {Spherical} A reference to this spherical. | |
| */ | |
| setFromVector3( v ) { | |
| return this.setFromCartesianCoords( v.x, v.y, v.z ); | |
| } | |
| /** | |
| * Sets the spherical components from the given Cartesian coordinates. | |
| * | |
| * @param {number} x - The x value. | |
| * @param {number} y - The x value. | |
| * @param {number} z - The x value. | |
| * @return {Spherical} A reference to this spherical. | |
| */ | |
| setFromCartesianCoords( x, y, z ) { | |
| this.radius = Math.sqrt( x * x + y * y + z * z ); | |
| if ( this.radius === 0 ) { | |
| this.theta = 0; | |
| this.phi = 0; | |
| } else { | |
| this.theta = Math.atan2( x, z ); | |
| this.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) ); | |
| } | |
| return this; | |
| } | |
| /** | |
| * Returns a new spherical with copied values from this instance. | |
| * | |
| * @return {Spherical} A clone of this instance. | |
| */ | |
| clone() { | |
| return new this.constructor().copy( this ); | |
| } | |
| } | |
| export { Spherical }; | |
Xet Storage Details
- Size:
- 3.1 kB
- Xet hash:
- 80f48525bbf68cc331e07e5a7d3a82c60308e946743907b31952fe511aec0656
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.