Vector2¶
Overview¶
Basic 2-dimensional vector, represented as (x,y). Values can be numeric, or NaN or infinite.
@author Jonathan Olson <jonathan.olson@colorado.edu>
Class Vector2¶
Constructor¶
new Vector2( x : number, y : number )¶
Instance Methods¶
getMagnitude() : number¶
The magnitude (Euclidean/L2 Norm) of this vector, i.e. \(\sqrt{x^2+y^2}\).
getMagnitudeSquared() : number¶
The squared magnitude (square of the Euclidean/L2 Norm) of this vector, i.e. \(x^2+y^2\).
distance( point : Vector2 ) : number¶
The Euclidean distance between this vector (treated as a point) and another point.
distanceXY( x : number, y : number ) : number¶
The Euclidean distance between this vector (treated as a point) and another point (x,y).
distanceSquared( point : Vector2 ) : number¶
The squared Euclidean distance between this vector (treated as a point) and another point.
distanceSquaredXY( x : number, y : number ) : number¶
The squared Euclidean distance between this vector (treated as a point) and another point with coordinates (x,y).
dot( v : Vector2 ) : number¶
The dot-product (Euclidean inner product) between this vector and another vector v.
dotXY( x : number, y : number ) : number¶
The dot-product (Euclidean inner product) between this vector and another vector (x,y).
getAngle() : number¶
The angle \(\theta\) of this vector, such that this vector is equal to $$ u = \begin{bmatrix} r\cos\theta \ r\sin\theta \end{bmatrix} $$ for the magnitude \(r \ge 0\) of the vector, with \(\theta\in(-\pi,\pi]\)
angleBetween( v : Vector2 ) : number¶
The angle between this vector and another vector, in the range \(\theta\in[0, \pi]\).
Equal to \(\theta = \cos^{-1}( \hat{u} \cdot \hat{v} )\) where \(\hat{u}\) is this vector (normalized) and \(\hat{v}\) is the input vector (normalized).
equals( other : Vector2 ) : boolean¶
Exact equality comparison between this vector and another vector.
@returns - Whether the two vectors have equal components
equalsEpsilon( other : Vector2, epsilon : number ) : boolean¶
Approximate equality comparison between this vector and another vector.
@returns - Whether difference between the two vectors has no component with an absolute value greater than epsilon.
isFinite() : boolean¶
Returns false if either component is NaN, infinity, or -infinity. Otherwise returns true.
copy( vector? : Vector2 ) : Vector2¶
Creates a copy of this vector, or if a vector is passed in, set that vector's values to ours.
This is the immutable form of the function set(), if a vector is provided. This will return a new vector, and will not modify this vector.
@param [vector] - If not provided, creates a new Vector2 with filled in values. Otherwise, fills in the values of the provided vector so that it equals this vector.
crossScalar( v : Vector2 ) : number¶
The scalar value of the z-component of the equivalent 3-dimensional cross product: $$ f( u, v ) = \left( \begin{bmatrix} u_x \ u_y \ 0 \end{bmatrix} \times \begin{bmatrix} v_x \ v_y \ 0 \end{bmatrix} \right)_z = u_x v_y - u_y v_x $$
normalized() : Vector2¶
Normalized (re-scaled) copy of this vector such that its magnitude is 1. If its initial magnitude is zero, an error is thrown.
This is the immutable form of the function normalize(). This will return a new vector, and will not modify this vector.
roundedSymmetric() : Vector2¶
Returns a copy of this vector with each component rounded by Utils.roundSymmetric.
This is the immutable form of the function roundSymmetric(). This will return a new vector, and will not modify this vector.
withMagnitude( magnitude : number ) : Vector2¶
Re-scaled copy of this vector such that it has the desired magnitude. If its initial magnitude is zero, an error is thrown. If the passed-in magnitude is negative, the direction of the resulting vector will be reversed.
This is the immutable form of the function setMagnitude(). This will return a new vector, and will not modify this vector.
timesScalar( scalar : number ) : Vector2¶
Copy of this vector, scaled by the desired scalar value.
This is the immutable form of the function multiplyScalar(). This will return a new vector, and will not modify this vector.
times( scalar : number ) : Vector2¶
Same as timesScalar.
This is the immutable form of the function multiply(). This will return a new vector, and will not modify this vector.
componentTimes( v : Vector2 ) : Vector2¶
Copy of this vector, multiplied component-wise by the passed-in vector v.
This is the immutable form of the function componentMultiply(). This will return a new vector, and will not modify this vector.
plus( v : Vector2 ) : Vector2¶
Addition of this vector and another vector, returning a copy.
This is the immutable form of the function add(). This will return a new vector, and will not modify this vector.
plusXY( x : number, y : number ) : Vector2¶
Addition of this vector and another vector (x,y), returning a copy.
This is the immutable form of the function addXY(). This will return a new vector, and will not modify this vector.
plusScalar( scalar : number ) : Vector2¶
Addition of this vector with a scalar (adds the scalar to every component), returning a copy.
This is the immutable form of the function addScalar(). This will return a new vector, and will not modify this vector.
minus( v : Vector2 ) : Vector2¶
Subtraction of this vector by another vector v, returning a copy.
This is the immutable form of the function subtract(). This will return a new vector, and will not modify this vector.
minusXY( x : number, y : number ) : Vector2¶
Subtraction of this vector by another vector (x,y), returning a copy.
This is the immutable form of the function subtractXY(). This will return a new vector, and will not modify this vector.
minusScalar( scalar : number ) : Vector2¶
Subtraction of this vector by a scalar (subtracts the scalar from every component), returning a copy.
This is the immutable form of the function subtractScalar(). This will return a new vector, and will not modify this vector.
dividedScalar( scalar : number ) : Vector2¶
Division of this vector by a scalar (divides every component by the scalar), returning a copy.
This is the immutable form of the function divideScalar(). This will return a new vector, and will not modify this vector.
negated() : Vector2¶
Negated copy of this vector (multiplies every component by -1).
This is the immutable form of the function negate(). This will return a new vector, and will not modify this vector.
getPerpendicular() : Vector2¶
Rotated by -pi/2 (perpendicular to this vector), returned as a copy.
rotated( angle : number ) : Vector2¶
Rotated by an arbitrary angle, in radians. Returned as a copy.
This is the immutable form of the function rotate(). This will return a new vector, and will not modify this vector.
@param angle - In radians
rotateAboutXY( x : number, y : number, angle : number ) : Vector2¶
Mutable method that rotates this vector about an x,y point.
@param x - origin of rotation in x @param y - origin of rotation in y @param angle - radians to rotate @returns this for chaining
rotateAboutPoint( point : Vector2, angle : number ) : Vector2¶
Same as rotateAboutXY but with a point argument.
rotatedAboutXY( x : number, y : number, angle : number ) : Vector2¶
Immutable method that returns a new Vector2 that is rotated about the given point.
@param x - origin for rotation in x @param y - origin for rotation in y @param angle - radians to rotate
rotatedAboutPoint( point : Vector2, angle : number ) : Vector2¶
Immutable method that returns a new Vector2 rotated about the given point.
blend( vector : Vector2, ratio : number ) : Vector2¶
A linear interpolation between this vector (ratio=0) and another vector (ratio=1).
@param vector @param ratio - Not necessarily constrained in [0, 1]
average( vector : Vector2 ) : Vector2¶
The average (midpoint) between this vector and another vector.
toString() : string¶
Debugging string for the vector.
toVector3() : Vector3¶
Converts this to a 3-dimensional vector, with the z-component equal to 0.
setXY( x : number, y : number ) : Vector2¶
Sets all of the components of this vector, returning this.
setX( x : number ) : Vector2¶
Sets the x-component of this vector, returning this.
setY( y : number ) : Vector2¶
Sets the y-component of this vector, returning this.
set( v : Vector2 ) : Vector2¶
Sets this vector to be a copy of another vector.
This is the mutable form of the function copy(). This will mutate (change) this vector, in addition to returning this vector itself.
setMagnitude( magnitude : number ) : Vector2¶
Sets the magnitude of this vector. If the passed-in magnitude is negative, this flips the vector and sets its magnitude to abs( magnitude ).
This is the mutable form of the function withMagnitude(). This will mutate (change) this vector, in addition to returning this vector itself.
add( v : Vector2 ) : Vector2¶
Adds another vector to this vector, changing this vector.
This is the mutable form of the function plus(). This will mutate (change) this vector, in addition to returning this vector itself.
addXY( x : number, y : number ) : Vector2¶
Adds another vector (x,y) to this vector, changing this vector.
This is the mutable form of the function plusXY(). This will mutate (change) this vector, in addition to returning this vector itself.
addScalar( scalar : number ) : Vector2¶
Adds a scalar to this vector (added to every component), changing this vector.
This is the mutable form of the function plusScalar(). This will mutate (change) this vector, in addition to returning this vector itself.
subtract( v : Vector2 ) : Vector2¶
Subtracts this vector by another vector, changing this vector.
This is the mutable form of the function minus(). This will mutate (change) this vector, in addition to returning this vector itself.
subtractXY( x : number, y : number ) : Vector2¶
Subtracts this vector by another vector (x,y), changing this vector.
This is the mutable form of the function minusXY(). This will mutate (change) this vector, in addition to returning this vector itself.
subtractScalar( scalar : number ) : Vector2¶
Subtracts this vector by a scalar (subtracts each component by the scalar), changing this vector.
This is the mutable form of the function minusScalar(). This will mutate (change) this vector, in addition to returning this vector itself.
multiplyScalar( scalar : number ) : Vector2¶
Multiplies this vector by a scalar (multiplies each component by the scalar), changing this vector.
This is the mutable form of the function timesScalar(). This will mutate (change) this vector, in addition to returning this vector itself.
multiply( scalar : number ) : Vector2¶
Multiplies this vector by a scalar (multiplies each component by the scalar), changing this vector. Same as multiplyScalar.
This is the mutable form of the function times(). This will mutate (change) this vector, in addition to returning this vector itself.
componentMultiply( v : Vector2 ) : Vector2¶
Multiplies this vector by another vector component-wise, changing this vector.
This is the mutable form of the function componentTimes(). This will mutate (change) this vector, in addition to returning this vector itself.
divideScalar( scalar : number ) : Vector2¶
Divides this vector by a scalar (divides each component by the scalar), changing this vector.
This is the mutable form of the function dividedScalar(). This will mutate (change) this vector, in addition to returning this vector itself.
negate() : Vector2¶
Negates this vector (multiplies each component by -1), changing this vector.
This is the mutable form of the function negated(). This will mutate (change) this vector, in addition to returning this vector itself.
normalize() : Vector2¶
Normalizes this vector (rescales to where the magnitude is 1), changing this vector.
This is the mutable form of the function normalized(). This will mutate (change) this vector, in addition to returning this vector itself.
roundSymmetric() : Vector2¶
Rounds each component of this vector with Utils.roundSymmetric.
This is the mutable form of the function roundedSymmetric(). This will mutate (change) this vector, in addition to returning the vector itself.
rotate( angle : number ) : Vector2¶
Rotates this vector by the angle (in radians), changing this vector.
This is the mutable form of the function rotated(). This will mutate (change) this vector, in addition to returning this vector itself.
@param angle - In radians
setPolar( magnitude : number, angle : number ) : Vector2¶
Sets this vector's value to be the x,y values matching the given magnitude and angle (in radians), changing this vector, and returning itself.
@param magnitude @param angle - In radians
toStateObject() : Vector2StateObject¶
Returns a duck-typed object meant for use with tandem/phet-io serialization. Although this is redundant with stateSchema, it is a nice feature of such a heavily-used type to be able to call toStateObject directly on the type.
@returns - see stateSchema for schema
freeToPool()¶
Instance Properties¶
x : number¶
The X coordinate of the vector.
y : number¶
The Y coordinate of the vector.
isVector2 : boolean¶
dimension : number¶
Static Methods¶
average( vectors : Vector2[] ) : Vector2¶
Take a component-based mean of all vectors provided.
createPolar( magnitude : number, angle : number ) : Vector2¶
Returns a Vector2 with the specified magnitude \(r\) and angle \(\theta\) (in radians), with the formula: $$ f( r, \theta ) = \begin{bmatrix} r\cos\theta \ r\sin\theta \end{bmatrix} $$
fromStateObject( stateObject : Vector2StateObject ) : Vector2¶
Constructs a Vector2 from a duck-typed object, for use with tandem/phet-io deserialization.
@param stateObject - see stateSchema for schema
getAngleBetweenVectors( startVector : Vector2, endVector : Vector2 ) : number¶
Allocation-free implementation that gets the angle between two vectors
@returns the angle between the vectors
getDistanceBetweenVectors( startVector : Vector2, endVector : Vector2 ) : number¶
Allocation-free way to get the distance between vectors.
@returns the angle between the vectors
Static Properties¶
pool : Pool¶
(readonly)
ZERO : Vector2¶
ImmutableVector2 zero vector: \(\begin{bmatrix} 0\\0 \end{bmatrix}\)
X_UNIT : Vector2¶
ImmutableVector2 vector: \(\begin{bmatrix} 1\\0 \end{bmatrix}\)
Y_UNIT : Vector2¶
ImmutableVector2 vector: \(\begin{bmatrix} 0\\1 \end{bmatrix}\)
Vector2IO : IOType¶
Type Vector2StateObject¶
StateObject<typeof STATE_SCHEMA>
Source Code¶
See the source for Vector2.ts in the dot repository.