Difference between revisions of "Oolite JavaScript Reference: Vector3D"

From Elite Wiki
(Changes for 1.70)
(Documented Vector.interpolate() (available in 1.70), and Vector.random()/Vector.randomDirection() (in trunk).)
Line 2: Line 2:
 
<small>'''Subtypes:''' none</small>
 
<small>'''Subtypes:''' none</small>
  
The '''<code>Vector</code>''' class is a [http://en.wikipedia.org/wiki/Vector_%28spatial%29 geometrical vector] in three-dimensional space, in cartesian representation. It is used to represent positions, headings and velocities. Explaining vector geometry is beyond the scope of this document, but there are numerous tutorials on the web.
+
The '''<code>Vector</code>''' class represents a [http://en.wikipedia.org/wiki/Vector_%28spatial%29 geometrical vector] in three-dimensional space, in cartesian representation. It is used to represent positions, headings and velocities. Explaining vector geometry is beyond the scope of this document, but there are numerous tutorials on the web.
  
 
=== Vector Expressions ===
 
=== Vector Expressions ===
Line 109: Line 109:
  
 
=== <code>toArray</code> ===
 
=== <code>toArray</code> ===
{{Oolite-method-added}}
+
{{Oolite-method-added|1.70}}
 
  function '''toArray'''() : Array
 
  function '''toArray'''() : Array
 
Returns an array of the vector’s components, in the order <code>[x, y, z]</code>. <code>v.toArray()</code> is equivalent to <code>[v.x, v.y, v.z]</code>.
 
Returns an array of the vector’s components, in the order <code>[x, y, z]</code>. <code>v.toArray()</code> is equivalent to <code>[v.x, v.y, v.z]</code>.
Line 118: Line 118:
  
 
<code>u.tripleProduct(v, w)</code> is equivalent to <code>u.[[#dot|dot]](v.[[#cross|cross]](w))</code>.
 
<code>u.tripleProduct(v, w)</code> is equivalent to <code>u.[[#dot|dot]](v.[[#cross|cross]](w))</code>.
 +
 +
== Static methods ==
 +
 +
=== <code>interpolate</code> ===
 +
{{Oolite-method-added|1.70}}
 +
function '''interpolate'''(u : [[#Vector Expressions|vectorExpression]], v : [[#Vector Expressions|vectorExpression]], where : Number) : Vector
 +
Returns a point on the line between <code>u</code> and <code>v</code>. If <code>where</code> is 0, the result is <code>u</code>.  If <code>where</code> is 1, the result is <code>v</code>. If <code>where</code> is 0.5, the result is half way between <code>u</code> and <code>v</code>. Values of <code>where</code> outside the range [0, 1] are valid; for instance, <code>Vector.interpolate(u, v, -1)</code> returns a point as far from <code>u</code> as <code>v</code> is, but in the opposite direction.
 +
 +
<code>Vector.interpolate(u, v, where)</code> is equivalent to <code>u.[[#add|add]](v.[[#subtract|subtract]](u).[[#multiply|multiply]](where))</code>, or <code>u.[[#multiply|multiply]](1 - where).[[#add|add]](v. [[#multiply|multiply]](where))</code>.
 +
 +
=== <code>random</code> ===
 +
{{Oolite-method-future|1.71}}
 +
function '''random'''([maxLength : Number]) : Vector
 +
Returns a vector of random length up to <code>maxLength</code>, in a random direction. If <code>maxLength</code> is not specified (or not a number), 1.0 is used.
 +
 +
'''See Also:''' <code>[[#randomDirection|randomDirection]]()</code>
 +
 +
=== <code>randomDirection</code> ===
 +
{{Oolite-method-future|1.71}}
 +
function '''randomDirection'''() : Vector
 +
Returns a vector of length 1, in a random direction.
 +
 +
'''See Also:''' <code>[[#random|random]]()</code>
  
 
[[Category:Oolite scripting]]
 
[[Category:Oolite scripting]]

Revision as of 23:52, 22 February 2008

Prototype: Object
Subtypes: none

The Vector class represents a geometrical vector in three-dimensional space, in cartesian representation. It is used to represent positions, headings and velocities. Explaining vector geometry is beyond the scope of this document, but there are numerous tutorials on the web.

Vector Expressions

All Oolite-provided functions which take a vector as an argument may instead be passed an Entity instead, in which case the entity’s position is used. In specifications, this is represented by arguments named vectorOrEntity.

Additionally, most Vector methods may be passed three numbers, or an array of three numbers, instead of a vector. In specifications, this is represented by arguments named vectorExpression. For example, if a and b are vectors whose values are (0, 1, 0) and (1, 0, 0) respectively, the following are equivalent:

var c = a.add(b);
var d = a.add(1, 0, 0);
var e = a.add([1, 0, 0]);
// c, d and e are now all (1, 1, 0).

Properties

x

x : Number (read/write)

The x co-ordinate of the vector.

y

y : Number (read/write)

The y co-ordinate of the vector.

z

z : Number (read/write)

The z co-ordinate of the vector.

Methods

Constructor

new Vector([value : vectorExpression]) : Vector

Create a new vector with the specified value. If no value is provided, the vector is initialized to (0, 0, 0).

add

function add(v : vectorExpression) : Vector

Returns the vector sum of the target and v.

See Also: subtract()

angleTo

function angleTo(v : vectorExpression) : Number

Returns the angle (in radians) between the target and vectorExpression.

v.angleTo(u) is equivalent to acos(v.direction().dot(u.direction())).

cross

function cross(v : vectorExpression) : Vector

Returns the cross product of the target and vectorExpression.

See Also: dot()

direction

function direction() : Vector

Returns the unit vector with the same direction as the target.

v.direction() is equivalent to v.multiply(1 / v.magnitude()).

See Also: magnitude()

distanceTo

function distanceTo(v : vectorExpression) : Number

Returns the distance between the target and v.

u.distanceTo(v) is equivalent to u.subtract(v).magnitude().

See Also: squaredDistanceTo()

dot

function dot(v : vectorExpression) : Number

Returns the dot product of the target and v.

See Also: cross()

magnitude

function magnitude() : Number

Returns the magnitude (or length) of the vector.

See Also: squaredMagnitude(), direction()

multiply

function multiply(f : Number) : Vector

Returns the product of the target and f. This has the effect of scaling the vector by the factor f.

rotateBy

function rotateBy(q : quaternionExpression) : Vector

Apply the rotation specified by q to the target.

rotationTo

function rotationTo(v : vectorExpression [, maxArc : Number]) : Quaternion

Returns a quaternion corresponding to a rotation from the target to v. The optional parameter maxArc specifies a maximum rotation angle; if the angle between the target and v is greater than maxArc radians, a rotation of maxArc radians towards vectorExpression is generated instead.

subtract

function subtract(v : vectorExpression) : Vector

Returns the vector difference between the target and v.

See Also: add()

squaredDistanceTo

function squaredDistanceTo(v: vectorExpression) : Number

Returns the square of the distance between the target and v.

u.squaredDistanceTo(v) is equivalent to u.distanceTo(v) * u.distanceTo(v), or u.subtract(v).squaredMagnitude().

squaredMagnitude

function squaredMagnitude() : Number

Returns the square of the magnitude of the vector.

v.squaredMagnitude() is equivalent to v.magnitude() * v.magnitude().

toArray

This method was added in Oolite test release 1.70.

function toArray() : Array

Returns an array of the vector’s components, in the order [x, y, z]. v.toArray() is equivalent to [v.x, v.y, v.z].

tripleProduct

function tripleProduct(v : vectorExpression, w : vectorExpression) : Number

Returns the triple product of the target, v and w.

u.tripleProduct(v, w) is equivalent to u.dot(v.cross(w)).

Static methods

interpolate

This method was added in Oolite test release 1.70.

function interpolate(u : vectorExpression, v : vectorExpression, where : Number) : Vector

Returns a point on the line between u and v. If where is 0, the result is u. If where is 1, the result is v. If where is 0.5, the result is half way between u and v. Values of where outside the range [0, 1] are valid; for instance, Vector.interpolate(u, v, -1) returns a point as far from u as v is, but in the opposite direction.

Vector.interpolate(u, v, where) is equivalent to u.add(v.subtract(u).multiply(where)), or u.multiply(1 - where).add(v. multiply(where)).

random

function random([maxLength : Number]) : Vector

Returns a vector of random length up to maxLength, in a random direction. If maxLength is not specified (or not a number), 1.0 is used.

See Also: randomDirection()

randomDirection

function randomDirection() : Vector

Returns a vector of length 1, in a random direction.

See Also: random()