UNPKG

js-2dmath

Version:

Fast 2d geometry math: Vector2, Rectangle, Circle, Matrix2x3 (2D transformation), Circle, BoundingBox, Line2, Segment2, Intersections, Distances, Transitions (animation/tween), Random numbers, Noise

465 lines (244 loc) 10.4 kB
<a name="Vec2"></a> ## Vec2 Stability: 2 (fixes / performance improvements) Vec2 is represented as a two coordinates array [x:Number, y:Number] <a name="Vec2-create"></a> * **create** (*x*: Number, *y*: Number): Vec2 Create a Vec2 given two coords <a name="Vec2-dFromPolar"></a> * **dFromPolar** (*length*: Number, *degrees*: Number (Degrees)): Vec2 Create a Vec2 given length and angle <a name="Vec2-fromPolar"></a> * **fromPolar** (*length*: Number, *radians*: Number (Radians)): Vec2 Create a Vec2 given length and angle <a name="Vec2-zero"></a> * **zero** (): Vec2 Create an empty Vec2 <a name="Vec2-clone"></a> * **clone** (*v1*: Vec2): Vec2 Clone given vec2 <a name="Vec2-equals"></a> * **equals** (*v1*: Vec2, *v2*: Vec2): Boolean Returns true if both vectors are equal(same coords) <a name="Vec2-equalsEpsilon"></a> * **equalsEpsilon** (*v1*: Vec2, *v2*: Vec2): Boolean Returns true if both vectors are "almost(Math.EPS)" equal <a name="Vec2-gt"></a> * **gt** (*v1*: Vec2, *v2*: Vec2): Boolean Returns true both coordinates of v1 area greater than v2 <a name="Vec2-lt"></a> * **lt** (*v1*: Vec2, *v2*: Vec2): Boolean Returns true both coordinates of v1 area lesser than v2 <a name="Vec2-near"></a> * **near** (*v1*: Vec2, *v2*: Vec2, *dist*: Number): Boolean Returns true if the distance between v1 and v2 is less than dist. <a name="Vec2-compare"></a> * **compare** (*v1*: Vec2, *v2*: Vec2): Number * 0 equal * 1 top * 2 top-right * 3 right * 4 bottom right * 5 bottom * 6 bottom-left * 7 left * 8 top-left <a name="Vec2-isValid"></a> * **isValid** (*v1*: Vec2): Boolean The vector does not contain any not number value: ±Infinity || NaN <a name="Vec2-isNaN"></a> * **isNaN** (*v1*: Vec2): Boolean Any coordinate is NaN? -> true <a name="Vec2-copy"></a> * **copy** (*out_vec2*: Vec2, *v1*: Vec2): Vec2 Copy v1 into out_vec2 <a name="Vec2-negate"></a> * **negate** (*out_vec2*: Vec2, *v1*: Vec2): Vec2 Negate v1 into out_vec2 <a name="Vec2-normalize"></a> * **normalize** (*out_vec2*: Vec2, *v1*: Vec2): Vec2 <a name="Vec2-normalizeSq"></a> * **normalizeSq** (*out_vec2*: Vec2, *v1*: Vec2): Vec2 Normalize v1 but squared no use sqrt, for performance. <a name="Vec2-perpendicular"></a> * **perpendicular** (*out_vec2*: Vec2, *v1*: Vec2): Vec2 Rotate the vector clockwise <a name="Vec2-rperpendicular"></a> * **rperpendicular** (*out_vec2*: Vec2, *v1*: Vec2): Vec2 Rotate the vector counterclockwise <a name="Vec2-lerp"></a> * **lerp** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2, *t*: Number): Vec2 Linearly interpolate between a and b. <a name="Vec2-lerpconst"></a> * **lerpconst** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2, *d*: Number): Vec2 Linearly interpolate between v1 towards v2 by distance d. <a name="Vec2-slerp"></a> * **slerp** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2, *t*: Number): Vec2 Spherical linearly interpolate between v1 and v2. <a name="Vec2-slerpconst"></a> * **slerpconst** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2, *radians*: Number (Radians)): Vec2 Spherical linearly interpolate between v1 towards v2 by no more than angle a in radians. <a name="Vec2-forAngle"></a> * **forAngle** (*out_vec2*: Vec2, *radians*: Number (Radians)): Vec2 Returns the unit length vector for the given angle (in radians). <a name="Vec2-project"></a> * **project** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 Returns the vector projection of v1 onto v2. <a name="Vec2-rotate"></a> * **rotate** (*out_vec2*: Vec2, *v1*: Vec2, *radians*: Number (Radians)): Vec2 Rotates the point by the given angle <a name="Vec2-rotateFrom"></a> * **rotateFrom** (*out_vec2*: Vec2, *v1*: Vec2, *radians*: Number (Radians), *center*: Vec2): Vec2 Rotates the point by the given angle around an optional center point. *note*: center cannot be out_vec2 *todo*: center cannot be out_vec2 <a name="Vec2-rotateVec"></a> * **rotateVec** (*out_vec2*: Vec2, *v1*: Vec2, *v2_n*: Vec2): Vec2 Rotate a vector given "angle" by a normalized vector v2_n <a name="Vec2-unrotateVec"></a> * **unrotateVec** (*out_vec2*: Vec2, *v1*: Vec2, *v2_n*: Vec2): Vec2 Un-rotate a vector given "angle" by a normalized vector v2_n <a name="Vec2-midPoint"></a> * **midPoint** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 <a name="Vec2-reflect"></a> * **reflect** (*out_vec2*: Vec2, *v1*: Vec2, *v2_n*: Vec2): Vec2 Reflect v1 by the imaginary line v2_n <a name="Vec2-subtract"></a> * **subtract** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 <a name="Vec2-subtract2"></a> * **subtract2** (*out_vec2*: Vec2, *v1*: Vec2, *x*: Number, *y*: Number): Vec2 <a name="Vec2-add"></a> * **add** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 <a name="Vec2-add2"></a> * **add2** (*out_vec2*: Vec2, *v1*: Vec2, *x*: Number, *y*: Number): Vec2 <a name="Vec2-multiply"></a> * **multiply** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 **see**: [scale](#Vec2-scale) <a name="Vec2-multiply2"></a> * **multiply2** (*out_vec2*: Vec2, *v1*: Vec2, *x*: Number, *y*: Number): Vec2 <a name="Vec2-divide"></a> * **divide** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 <a name="Vec2-divide2"></a> * **divide2** (*out_vec2*: Vec2, *v1*: Vec2, *x*: Number, *y*: Number): Vec2 <a name="Vec2-scale"></a> * **scale** (*out_vec2*: Vec2, *v1*: Vec2, *factor*: Number): Vec2 **see**: [multiply](#Vec2-multiply) <a name="Vec2-pow"></a> * **pow** (*out_vec2*: Vec2, *v1*: Vec2, *y*: Number): Vec2 (x1^y, y1^y) <a name="Vec2-max"></a> * **max** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 <a name="Vec2-min"></a> * **min** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2): Vec2 <a name="Vec2-abs"></a> * **abs** (*out_vec2*: Vec2, *v1*: Vec2): Vec2 <a name="Vec2-scaleAndAdd"></a> * **scaleAndAdd** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2, *factor*: Number): Vec2 <a name="Vec2-clamp"></a> * **clamp** (*out_vec2*: Vec2, *v1*: Vec2, *length*: Number): Vec2 <a name="Vec2-truncate"></a> * **truncate** (*out_vec2*: Vec2, *v1*: Vec2, *length*: Number) <a name="Vec2-crossVZ"></a> * **crossVZ** (*out_vec2*: Vec2, *vec2*: Vec2, *factor*: Number): Number Cross product between a vector and the Z component of a vector AKA Rotate CW and scale *todo*: test use rprependicular ? <a name="Vec2-crossZV"></a> * **crossZV** (*out_vec2*: Vec2, *factor*: Number, *vec2*: Vec2): Vec2 Cross product between a vector and the Z component of a vector AKA Rotate CCW and scale *todo*: test use prependicular ? <a name="Vec2-tripleProduct"></a> * **tripleProduct** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2, *v3*: Vec2) (A x B) x C = B(C · A) - A(C · B) (A x B) x C = B(A.dot(C)) - A(B.dot(C)) <a name="Vec2-magnitude"></a> * **magnitude** (*v1*: Vec2, *v2*: Vec2): Number <a name="Vec2-dot"></a> * **dot** (*v1*: Vec2, *v2*: Vec2): Number v1 · v2 = |a| * |b| * sin θ <a name="Vec2-cross"></a> * **cross** (*v1*: Vec2, *v2*: Vec2): Number v1 × v2 = |a| * |b| * sin θ <a name="Vec2-toAngle"></a> * **toAngle** (*v1*: Vec2): Number <a name="Vec2-angleTo"></a> * **angleTo** (*v1*: Vec2, *v2*: Vec2): Number <a name="Vec2-distance"></a> * **distance** (*v1*: Vec2, *v2*: Vec2): Number Returns the distance between v1 and v2. <a name="Vec2-sqrDistance"></a> * **sqrDistance** (*v1*: Vec2, *v2*: Vec2): Number Distance without using sqrt (squared distance) <a name="Vec2-length"></a> * **length** (*v1*: Vec2): Number Return vector the length. <a name="Vec2-sqrLength"></a> * **sqrLength** (*v1*: Vec2): Number Squared length (no sqrt) <a name="Vec2-within"></a> * **within** (*v1*: Vec2, *v2*: Vec2, *v3*: Vec2): Boolean Return true if v2 is between v1 and v3(inclusive) <a name="Vec2-$within"></a> * **$within** (*px*: Number, *py*: Number, *qx*: Number, *qy*: Number, *rx*: Number, *ry*: Number): Boolean Return true if q is between p and r(inclusive) <a name="Vec2-$near"></a> * **$near** (*px*: Number, *py*: Number, *qx*: Number, *qy*: Number, *dist*: Number): Boolean p is near x ± dist ("box test") <a name="Vec2-$cross"></a> * **$cross** (*x1*: Number, *y1*: Number, *x2*: Number, *y2*: Number): Number <a name="Vec2-$dot"></a> * **$dot** (*x1*: Number, *y1*: Number, *x2*: Number, *y2*: Number): Number <a name="Vec2-swap"></a> * **swap** (*v1*: Vec2, *v2*: Vec2): Undefined Swap vectors, both will be modified. for lazy people <a name="Vec2-toString"></a> * **toString** (*v1*: Vec2): String (x, y) with only two decimals, for readability <a name="Vec2-perp"></a> * **perp** (*out_vec2*: Vec2, *v1*: Vec2) **see**: [perpendicular](#Vec2-perpendicular) <a name="Vec2-rotateCW"></a> * **rotateCW** (*out_vec2*: Vec2, *v1*: Vec2) **see**: [perpendicular](#Vec2-perpendicular) <a name="Vec2-rperp"></a> * **rperp** (*out_vec2*: Vec2, *v1*: Vec2) **see**: [rperpendicular](#Vec2-rperpendicular) <a name="Vec2-rotateCCW"></a> * **rotateCCW** (*out_vec2*: Vec2, *v1*: Vec2) **see**: [rperpendicular](#Vec2-rperpendicular) <a name="Vec2-interpolate"></a> * **interpolate** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2, *t*: Number) **see**: [lerp](#Vec2-lerp) <a name="Vec2-angle"></a> * **angle** (*v1*: Vec2) **see**: [toAngle](#Vec2-toAngle) <a name="Vec2-eq"></a> * **eq** (*v1*: Vec2, *v2*: Vec2) **see**: [equals](#Vec2-equals) <a name="Vec2-sub"></a> * **sub** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2) **see**: [subtract](#Vec2-subtract) <a name="Vec2-sub2"></a> * **sub2** (*out_vec2*: Vec2, *v1*: Vec2, *x*: Number, *y*: Number) **see**: [subtract2](#Vec2-subtract2) <a name="Vec2-mul"></a> * **mul** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2) **see**: [multiply](#Vec2-multiply) <a name="Vec2-mul2"></a> * **mul2** (*out_vec2*: Vec2, *v1*: Vec2, *x*: Number, *y*: Number) **see**: [multiply2](#Vec2-multiply2) <a name="Vec2-div"></a> * **div** (*out_vec2*: Vec2, *v1*: Vec2, *v2*: Vec2) **see**: [divide](#Vec2-divide) <a name="Vec2-div2"></a> * **div2** (*out_vec2*: Vec2, *v1*: Vec2, *x*: Number, *y*: Number) **see**: [divide2](#Vec2-divide2) <a name="Vec2-distanceSq"></a> * **distanceSq** (*v1*: Vec2, *v2*: Vec2) **see**: [sqrDistance](#Vec2-sqrDistance) <a name="Vec2-lengthSq"></a> * **lengthSq** (*v1*: Vec2) **see**: [sqrLength](#Vec2-sqrLength)