vector2-node
Version:
An object representing a 2D vector.
555 lines (406 loc) • 20.7 kB
HTML
<html>
<head>
<title>Vector2</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">
<link rel="stylesheet" media="all" href="docco.css" />
</head>
<body>
<div id="container">
<div id="background"></div>
<ul class="sections">
<li id="section-1">
<div class="annotation">
<div class="pilwrap for-h1">
<a class="pilcrow" href="#section-1">¶</a>
</div>
<h1>Vector2</h1>
<p>An object representing a 2D vector.
Based on the <a href="http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Vector2.html">Vector2 class from LibGDX.</a></p>
</div>
</li>
<li id="section-2">
<div class="annotation">
<div class="pilwrap ">
<a class="pilcrow" href="#section-2">¶</a>
</div>
<p>Written by <a href="http://rahatah.me/d">Rahat Ahmed</a>.</p>
</div>
</li>
<li id="section-3">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-3">¶</a>
</div>
<h2>Vector2(Vector2)</h2>
<h2>Vector2(x, y)</h2>
<p>Constructor for Vector2.</p>
</div>
<div class="content"><div class='highlight'><pre><span class="function"><span class="keyword">function</span> <span class="title">Vector2</span><span class="params">(x, y)</span> {</span>
<span class="keyword">this</span>.set(x, y);
}</pre></div></div>
</li>
<li id="section-4">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-4">¶</a>
</div>
<h2>add(Vector2)</h2>
<h2>add(x, y)</h2>
<p>Adds given values to this vector.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.add = <span class="keyword">function</span>(x, y) {
<span class="keyword">if</span>(x <span class="keyword">instanceof</span> Vector2)
{
<span class="keyword">this</span>.x += x.x;
<span class="keyword">this</span>.y += x.y;
}
<span class="keyword">else</span>
{
<span class="keyword">this</span>.x += x || <span class="number">0</span>;
<span class="keyword">this</span>.y += y || <span class="number">0</span>;
}
<span class="keyword">return</span> <span class="keyword">this</span>;
};</pre></div></div>
</li>
<li id="section-5">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-5">¶</a>
</div>
<h2>angle</h2>
<h3>angle()</h3>
<p>Returns the angle in radians of this vector
relative to the x-axis (counter-clockwise)
in the range 0 to 2 * PI.</p>
<h3>angle(radians)</h3>
<p>Rotates this vector to the given angle in radians.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.angle = <span class="keyword">function</span>(rad) {
<span class="keyword">if</span>(rad !== <span class="literal">undefined</span>)
<span class="keyword">return</span> <span class="keyword">this</span>.set(<span class="keyword">this</span>.length(), <span class="number">0</span>).rotate(rad);
<span class="keyword">var</span> angle = Math.atan2(<span class="keyword">this</span>.y, <span class="keyword">this</span>.x);
<span class="keyword">if</span>(angle < <span class="number">0</span>) angle += Math.PI*<span class="number">2</span>;
<span class="keyword">return</span> angle;
};</pre></div></div>
</li>
<li id="section-6">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-6">¶</a>
</div>
<h2>angleDeg</h2>
<h3>angleDeg()</h3>
<p>Same as angle() but in degrees.</p>
<h3>angleDeg(degrees)</h3>
<p>Same as angle(radians) but in degrees.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.angleDeg = <span class="keyword">function</span>(deg) {
<span class="keyword">if</span>(deg !== <span class="literal">undefined</span>)
<span class="keyword">return</span> <span class="keyword">this</span>.angle(deg / <span class="number">180</span> * Math.PI);
<span class="keyword">return</span> <span class="keyword">this</span>.angle() * <span class="number">180</span> / Math.PI;
};</pre></div></div>
</li>
<li id="section-7">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-7">¶</a>
</div>
<h2>clone()</h2>
<h2>copy()</h2>
<p>Returns a new identical Vector2.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.clone = Vector2.prototype.copy = <span class="keyword">function</span>() {
<span class="keyword">return</span> <span class="keyword">new</span> Vector2(<span class="keyword">this</span>.x, <span class="keyword">this</span>.y);
};</pre></div></div>
</li>
<li id="section-8">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-8">¶</a>
</div>
<h2>cross(Vector2)</h2>
<h2>cross(x, y)</h2>
<p>Returns the cross product of this vector and another.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.cross = <span class="keyword">function</span>(x, y) {
<span class="keyword">if</span>(x <span class="keyword">instanceof</span> Vector2)
<span class="keyword">return</span> <span class="keyword">this</span>.x * x.y - <span class="keyword">this</span>.y * x.x;
<span class="keyword">return</span> <span class="keyword">this</span>.x * y - <span class="keyword">this</span>.y * x;
};</pre></div></div>
</li>
<li id="section-9">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-9">¶</a>
</div>
<h2>distance(Vector2)</h2>
<h2>distance(x, y)</h2>
<p>Returns the distance between this vector and another.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.distance = <span class="keyword">function</span>(x, y) {
<span class="keyword">var</span> distSq = <span class="keyword">this</span>.distanceSq(x, y);
<span class="keyword">if</span>(distSq === <span class="literal">undefined</span>)
<span class="keyword">return</span> <span class="literal">undefined</span>;
<span class="keyword">return</span> Math.sqrt(distSq);
};</pre></div></div>
</li>
<li id="section-10">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-10">¶</a>
</div>
<h2>distanceSq(Vector2)</h2>
<h2>distanceSq(x, y)</h2>
<p>Returns the distance squared of this vector and another.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.distanceSq = <span class="keyword">function</span>(x, y) {
<span class="keyword">var</span> dx, dy;
<span class="keyword">if</span>(x <span class="keyword">instanceof</span> Vector2)
{
dx = x.x - <span class="keyword">this</span>.x;
dy = x.y - <span class="keyword">this</span>.y;
}
<span class="keyword">else</span> <span class="keyword">if</span>(y !== <span class="literal">undefined</span>)
{
dx = x - <span class="keyword">this</span>.x;
dy = y - <span class="keyword">this</span>.y;
}
<span class="keyword">else</span>
<span class="keyword">return</span> <span class="literal">undefined</span>;
<span class="keyword">return</span> dx * dx + dy * dy;
};</pre></div></div>
</li>
<li id="section-11">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-11">¶</a>
</div>
<h2>dot(Vector2)</h2>
<h2>dot(x, y)</h2>
<p>Returns the dot product of this vector and another.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.dot = <span class="keyword">function</span>(x, y) {
<span class="keyword">if</span>(x <span class="keyword">instanceof</span> Vector2)
<span class="keyword">return</span> <span class="keyword">this</span>.x * x.x + <span class="keyword">this</span>.y * x.y;
<span class="keyword">return</span> <span class="keyword">this</span>.x * x + <span class="keyword">this</span>.y * y;
};</pre></div></div>
</li>
<li id="section-12">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-12">¶</a>
</div>
<h2>equals</h2>
<h3>equals(Vector2)</h3>
<p>Returns true if this and another vector2 are equal.</p>
<h3>equals(Vector2, epsilon)</h3>
<p>Returns true if this and another vector2 are equal within an epsilon.</p>
<h3>equals(x, y)</h3>
<p>Returns true if this vector equals given x, y components.</p>
<h3>equals(x, y, epsilon)</h3>
<p>Returns true if this vector equasl given x, y components within an epsilon.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.equals = <span class="keyword">function</span>(x, y, epsilon) {
<span class="keyword">if</span>(x <span class="keyword">instanceof</span> Vector2)
{
y = y || <span class="number">0</span>;
<span class="keyword">return</span> Math.abs(<span class="keyword">this</span>.x - x.x) <= y && Math.abs(<span class="keyword">this</span>.y - x.y) <= y;
}
<span class="keyword">else</span> <span class="keyword">if</span>(y !== <span class="literal">undefined</span>)
{
epsilon = epsilon || <span class="number">0</span>;
<span class="keyword">return</span> Math.abs(<span class="keyword">this</span>.x - x) <= epsilon && Math.abs(<span class="keyword">this</span>.y - y) <= epsilon;
}
<span class="keyword">else</span>
<span class="keyword">return</span> <span class="literal">false</span>;
};</pre></div></div>
</li>
<li id="section-13">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-13">¶</a>
</div>
<h2>length()</h2>
<p>Returns the length of this vector.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.length = <span class="keyword">function</span>() {
<span class="keyword">return</span> Math.sqrt(<span class="keyword">this</span>.lengthSq());
};</pre></div></div>
</li>
<li id="section-14">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-14">¶</a>
</div>
<h2>lengthSq()</h2>
<p>Returns the length squared of this vector.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.lengthSq = <span class="keyword">function</span>() {
<span class="keyword">return</span> <span class="keyword">this</span>.x * <span class="keyword">this</span>.x + <span class="keyword">this</span>.y * <span class="keyword">this</span>.y;
};</pre></div></div>
</li>
<li id="section-15">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-15">¶</a>
</div>
<h2>negate()</h2>
<p>Negates this vector. (Multiplies x and y by -1).
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.negate = <span class="keyword">function</span>() {
<span class="keyword">return</span> <span class="keyword">this</span>.scale(-<span class="number">1</span>);
};</pre></div></div>
</li>
<li id="section-16">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-16">¶</a>
</div>
<h2>normalize()</h2>
<p>Normalizes this vector.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.normalize = <span class="keyword">function</span>() {
<span class="keyword">return</span> <span class="keyword">this</span>.scale(<span class="number">1</span>/<span class="keyword">this</span>.length());
};</pre></div></div>
</li>
<li id="section-17">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-17">¶</a>
</div>
<h2>rotate(radians)</h2>
<p>Rotates this vector by an angle in degrees counter-clockwise.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.rotate = <span class="keyword">function</span>(rad) {
<span class="keyword">var</span> cos = Math.cos(rad);
<span class="keyword">var</span> sin = Math.sin(rad);
<span class="keyword">return</span> <span class="keyword">this</span>.set(<span class="keyword">this</span>.x * cos - <span class="keyword">this</span>.y * sin,
<span class="keyword">this</span>.x * sin + <span class="keyword">this</span>.y * cos);
};</pre></div></div>
</li>
<li id="section-18">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-18">¶</a>
</div>
<h2>rotateDeg(degrees)</h2>
<p>Same as rotate but in degrees.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.rotateDeg = <span class="keyword">function</span>(deg) {
<span class="keyword">return</span> <span class="keyword">this</span>.rotate(deg / <span class="number">180</span> * Math.PI)
};</pre></div></div>
</li>
<li id="section-19">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-19">¶</a>
</div>
<h2>scale(scale)</h2>
<h2>scale(scaleX, scaleY)</h2>
<p>Scales this vector by a scalar.
Second argument to scale y separate from x is optional.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.scale = <span class="keyword">function</span>(scaleX, scaleY) {
<span class="keyword">this</span>.x *= scaleX;
<span class="keyword">this</span>.y *= (scaleY || scaleX);
<span class="keyword">return</span> <span class="keyword">this</span>;
};</pre></div></div>
</li>
<li id="section-20">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-20">¶</a>
</div>
<h2>set(Vector2)</h2>
<h2>set(x, y)</h2>
<p>Sets this vector to the given values.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.set = <span class="keyword">function</span>(x, y) {
<span class="keyword">if</span>(x <span class="keyword">instanceof</span> Vector2)
{
<span class="keyword">this</span>.x = x.x;
<span class="keyword">this</span>.y = x.y;
}
<span class="keyword">else</span>
{
<span class="keyword">this</span>.x = x || <span class="number">0</span>;
<span class="keyword">this</span>.y = y || <span class="number">0</span>;
}
<span class="keyword">return</span> <span class="keyword">this</span>;
};</pre></div></div>
</li>
<li id="section-21">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-21">¶</a>
</div>
<h2>setPolar(radians, length)</h2>
<p>Set this vector by angle in degrees and magnitude.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.setPolar = <span class="keyword">function</span>(rad, length) {
<span class="keyword">return</span> <span class="keyword">this</span>.set(length, <span class="number">0</span>).rotate(rad);
};</pre></div></div>
</li>
<li id="section-22">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-22">¶</a>
</div>
<h2>setPolarDeg(degrees, length)</h2>
<p>Same as setPolar but in degrees.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.setPolarDeg = <span class="keyword">function</span>(deg, length) {
<span class="keyword">return</span> <span class="keyword">this</span>.setPolar(deg / <span class="number">180</span> * Math.PI, length);
};</pre></div></div>
</li>
<li id="section-23">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-23">¶</a>
</div>
<h2>sub(Vector2)</h2>
<h2>sub(x, y)</h2>
<p>Same as add, but subtracting.
Returns this vector for chaining.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.sub = <span class="keyword">function</span>(x, y) {
<span class="keyword">if</span>(y !== <span class="literal">undefined</span>)
{
<span class="keyword">this</span>.x -= x;
<span class="keyword">this</span>.y -= y;
}
<span class="keyword">else</span>
{
<span class="keyword">this</span>.x -= x.x;
<span class="keyword">this</span>.y -= x.y;
}
<span class="keyword">return</span> <span class="keyword">this</span>;
};</pre></div></div>
</li>
<li id="section-24">
<div class="annotation">
<div class="pilwrap for-h2">
<a class="pilcrow" href="#section-24">¶</a>
</div>
<h2>toString()</h2>
<p>Returns a string representation of this vector.</p>
</div>
<div class="content"><div class='highlight'><pre>Vector2.prototype.toString = <span class="keyword">function</span>() {
<span class="keyword">return</span> <span class="string">"("</span> + <span class="keyword">this</span>.x + <span class="string">", "</span> + <span class="keyword">this</span>.y + <span class="string">")"</span>;
};
module.exports = Vector2;</pre></div></div>
</li>
</ul>
</div>
</body>
</html>