blob: 6da994b19be70ebc08744b7cdac037b58512eb58 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>VectorMath</title>
<link rel="stylesheet" type="text/css"
href="styles.css" />
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,600,700,800" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="favicon.ico" />
<script src="client-static.js"></script>
</head>
<body data-library="VectorMath">
<div class="page">
<div class="header">
<a href="index.html"><div class="logo"></div></a>
<a href="index.html">Dart Documentation</a>
&rsaquo; <a href="VectorMath.html">VectorMath</a></div>
<div class="nav">
<h2><div class="icon-library"></div><a href="dart_core.html">dart:core</a></h2><h2><div class="icon-library"></div><a href="dart_coreimpl.html">dart:coreimpl</a></h2><h2><div class="icon-library"></div><strong>VectorMath</strong></h2><ul class="icon">
<li><a href="VectorMath/vec2.html"><div class="icon-class"></div>vec2</a></li>
<li><a href="VectorMath/vec3.html"><div class="icon-class"></div>vec3</a></li>
<li><a href="VectorMath/vec4.html"><div class="icon-class"></div>vec4</a></li>
<li><a href="VectorMath/mat2x2.html"><div class="icon-class"></div>mat2x2</a></li>
<li><a href="VectorMath/mat2x3.html"><div class="icon-class"></div>mat2x3</a></li>
<li><a href="VectorMath/mat2x4.html"><div class="icon-class"></div>mat2x4</a></li>
<li><a href="VectorMath/mat3x2.html"><div class="icon-class"></div>mat3x2</a></li>
<li><a href="VectorMath/mat3x3.html"><div class="icon-class"></div>mat3x3</a></li>
<li><a href="VectorMath/mat3x4.html"><div class="icon-class"></div>mat3x4</a></li>
<li><a href="VectorMath/mat4x2.html"><div class="icon-class"></div>mat4x2</a></li>
<li><a href="VectorMath/mat4x3.html"><div class="icon-class"></div>mat4x3</a></li>
<li><a href="VectorMath/mat4x4.html"><div class="icon-class"></div>mat4x4</a></li>
<li><a href="VectorMath/quat.html"><div class="icon-class"></div>quat</a></li>
</ul>
</div>
<div class="content">
<h2>Library <strong>VectorMath</strong></h2>
<div class="doc"></div>
<h3>Functions</h3>
<div class="method"><h4 id="relativeError">
<span class="show-code">Code</span>
<a href="dart_core/num.html">num</a> <strong>relativeError</strong>(calculated, correct) <a class="anchor-link" href="#relativeError"
title="Permalink to null.relativeError">#</a></h4>
<div class="doc">
<p>Returns relative error between
<span class="param">calculated</span> and
<span class="param">correct</span>. The type of
<span class="param">calculated</span> and
<span class="param">correct</span> must match and can be any vector, matrix, or quaternion.</p>
<pre class="source">
num relativeError(Dynamic calculated, Dynamic correct) {
if (calculated is num &amp;&amp; correct is num) {
num diff = (calculated - correct).abs();
return diff/correct;
}
return calculated.relativeError(correct);
}
</pre>
</div>
</div>
<div class="method"><h4 id="absoluteError">
<span class="show-code">Code</span>
<a href="dart_core/num.html">num</a> <strong>absoluteError</strong>(calculated, correct) <a class="anchor-link" href="#absoluteError"
title="Permalink to null.absoluteError">#</a></h4>
<div class="doc">
<p>Returns absolute error between
<span class="param">calculated</span> and
<span class="param">correct</span>. The type of
<span class="param">calculated</span> and
<span class="param">correct</span> must match and can be any vector, matrix, or quaternion.</p>
<pre class="source">
num absoluteError(Dynamic calculated, Dynamic correct) {
if (calculated is num &amp;&amp; correct is num) {
num diff = (calculated - correct).abs();
return diff;
}
return calculated.absoluteError(correct);
}
</pre>
</div>
</div>
<div class="method"><h4 id="dot">
<span class="show-code">Code</span>
<a href="dart_core/num.html">num</a> <strong>dot</strong>(x, y) <a class="anchor-link" href="#dot"
title="Permalink to null.dot">#</a></h4>
<div class="doc">
<p>Returns the dot product between vectors
<span class="param">x</span> and
<span class="param">y</span>. The dimension of
<span class="param">x</span> and
<span class="param">y</span> must match.</p>
<pre class="source">
num dot(Dynamic x, Dynamic y) {
return x.dot(y);
}
</pre>
</div>
</div>
<div class="method"><h4 id="length">
<span class="show-code">Code</span>
<a href="dart_core/num.html">num</a> <strong>length</strong>(x) <a class="anchor-link" href="#length"
title="Permalink to null.length">#</a></h4>
<div class="doc">
<p>Returns the length of vector
<span class="param">x</span></p>
<pre class="source">
num length(Dynamic x) {
return x.length();
}
</pre>
</div>
</div>
<div class="method"><h4 id="distance">
<span class="show-code">Code</span>
<a href="dart_core/num.html">num</a> <strong>distance</strong>(x, y) <a class="anchor-link" href="#distance"
title="Permalink to null.distance">#</a></h4>
<div class="doc">
<p>Returns the distance between vectors
<span class="param">x</span> and
<span class="param">y</span>. The dimension of
<span class="param">x</span> and
<span class="param">y</span> must match.</p>
<pre class="source">
num distance(Dynamic x, Dynamic y) {
return length(x-y);
}
</pre>
</div>
</div>
<div class="method"><h4 id="cross">
<span class="show-code">Code</span>
<a href="VectorMath/vec3.html">vec3</a> <strong>cross</strong>(<a href="VectorMath/vec3.html">vec3</a> x, <a href="VectorMath/vec3.html">vec3</a> y) <a class="anchor-link" href="#cross"
title="Permalink to null.cross">#</a></h4>
<div class="doc">
<p>Returns the cross product between
<span class="param">x</span> and
<span class="param">y</span>. Both
<span class="param">x</span> and
<span class="param">y</span> must be 3D vectors (<a class="crossref" href="VectorMath/vec3.html">vec3</a>)</p>
<pre class="source">
vec3 cross(vec3 x, vec3 y) {
return x.cross(y);
}
</pre>
</div>
</div>
<div class="method"><h4 id="normalize">
<span class="show-code">Code</span>
<strong>normalize</strong>(x) <a class="anchor-link" href="#normalize"
title="Permalink to null.normalize">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">x</span> normalized. Supports <code>num</code>, <a class="crossref" href="VectorMath/vec2.html">vec2</a>, <a class="crossref" href="VectorMath/vec3.html">vec3</a>, and <a class="crossref" href="VectorMath/vec4.html">vec4</a> input types. The return type will match the type of
<span class="param">x</span></p>
<pre class="source">
Dynamic normalize(Dynamic x) {
if (x is num) {
return 1.0 * sign(x);
}
Dynamic r;
if (x is vec2) {
r = new vec2(x);
r.normalize();
}
if (x is vec3) {
r = new vec3(x);
r.normalize();
}
if (x is vec4) {
r = new vec4(x);
r.normalize();
}
return r;
}
</pre>
</div>
</div>
<div class="method"><h4 id="sin">
<span class="show-code">Code</span>
<strong>sin</strong>(arg) <a class="anchor-link" href="#sin"
title="Permalink to null.sin">#</a></h4>
<div class="doc">
<p>Returns sine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic sin(Dynamic arg) {
if (arg is num) {
return Math.sin(arg);
}
if (arg is vec2) {
return new vec2(Math.sin(arg.x), Math.sin(arg.y));
}
if (arg is vec3) {
return new vec3(Math.sin(arg.x), Math.sin(arg.y), Math.sin(arg.z));
}
if (arg is vec4) {
return new vec4(Math.sin(arg.x), Math.sin(arg.y), Math.sin(arg.z), Math.sin(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="cos">
<span class="show-code">Code</span>
<strong>cos</strong>(arg) <a class="anchor-link" href="#cos"
title="Permalink to null.cos">#</a></h4>
<div class="doc">
<p>Returns cosine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic cos(Dynamic arg) {
if (arg is num) {
return Math.cos(arg);
}
if (arg is vec2) {
return new vec2(Math.cos(arg.x), Math.cos(arg.y));
}
if (arg is vec3) {
return new vec3(Math.cos(arg.x), Math.cos(arg.y), Math.cos(arg.z));
}
if (arg is vec4) {
return new vec4(Math.cos(arg.x), Math.cos(arg.y), Math.cos(arg.z), Math.cos(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="tan">
<span class="show-code">Code</span>
<strong>tan</strong>(arg) <a class="anchor-link" href="#tan"
title="Permalink to null.tan">#</a></h4>
<div class="doc">
<p>Returns tangent of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic tan(Dynamic arg) {
if (arg is num) {
return Math.tan(arg);
}
if (arg is vec2) {
return new vec2(Math.tan(arg.x), Math.tan(arg.y));
}
if (arg is vec3) {
return new vec3(Math.tan(arg.x), Math.tan(arg.y), Math.tan(arg.z));
}
if (arg is vec4) {
return new vec4(Math.tan(arg.x), Math.tan(arg.y), Math.tan(arg.z), Math.tan(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="asin">
<span class="show-code">Code</span>
<strong>asin</strong>(arg) <a class="anchor-link" href="#asin"
title="Permalink to null.asin">#</a></h4>
<div class="doc">
<p>Returns arc sine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic asin(Dynamic arg) {
if (arg is num) {
return Math.asin(arg);
}
if (arg is vec2) {
return new vec2(Math.asin(arg.x), Math.asin(arg.y));
}
if (arg is vec3) {
return new vec3(Math.asin(arg.x), Math.asin(arg.y), Math.asin(arg.z));
}
if (arg is vec4) {
return new vec4(Math.asin(arg.x), Math.asin(arg.y), Math.asin(arg.z), Math.asin(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="acos">
<span class="show-code">Code</span>
<strong>acos</strong>(arg) <a class="anchor-link" href="#acos"
title="Permalink to null.acos">#</a></h4>
<div class="doc">
<p>Returns arc cosine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic acos(Dynamic arg) {
if (arg is num) {
return Math.acos(arg);
}
if (arg is vec2) {
return new vec2(Math.acos(arg.x), Math.acos(arg.y));
}
if (arg is vec3) {
return new vec3(Math.acos(arg.x), Math.acos(arg.y), Math.acos(arg.z));
}
if (arg is vec4) {
return new vec4(Math.acos(arg.x), Math.acos(arg.y), Math.acos(arg.z), Math.acos(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="sinh">
<span class="show-code">Code</span>
<strong>sinh</strong>(arg) <a class="anchor-link" href="#sinh"
title="Permalink to null.sinh">#</a></h4>
<div class="doc">
<p>Returns hyperbolic sine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic sinh(Dynamic arg) {
if (arg is num) {
return Math.sinh(arg);
}
if (arg is vec2) {
return new vec2(Math.sinh(arg.x), Math.sinh(arg.y));
}
if (arg is vec3) {
return new vec3(Math.sinh(arg.x), Math.sinh(arg.y), Math.sinh(arg.z));
}
if (arg is vec4) {
return new vec4(Math.sinh(arg.x), Math.sinh(arg.y), Math.sinh(arg.z), Math.sinh(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="cosh">
<span class="show-code">Code</span>
<strong>cosh</strong>(arg) <a class="anchor-link" href="#cosh"
title="Permalink to null.cosh">#</a></h4>
<div class="doc">
<p>Returns hyperbolic cosine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic cosh(Dynamic arg) {
if (arg is num) {
return Math.cosh(arg);
}
if (arg is vec2) {
return new vec2(Math.cosh(arg.x), Math.cosh(arg.y));
}
if (arg is vec3) {
return new vec3(Math.cosh(arg.x), Math.cosh(arg.y), Math.cosh(arg.z));
}
if (arg is vec4) {
return new vec4(Math.cosh(arg.x), Math.cosh(arg.y), Math.cosh(arg.z), Math.cosh(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="tanh">
<span class="show-code">Code</span>
<strong>tanh</strong>(arg) <a class="anchor-link" href="#tanh"
title="Permalink to null.tanh">#</a></h4>
<div class="doc">
<p>Returns hyperbolic tangent of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic tanh(Dynamic arg) {
if (arg is num) {
return Math.tanh(arg);
}
if (arg is vec2) {
return new vec2(Math.tanh(arg.x), Math.tanh(arg.y));
}
if (arg is vec3) {
return new vec3(Math.tanh(arg.x), Math.tanh(arg.y), Math.tanh(arg.z));
}
if (arg is vec4) {
return new vec4(Math.tanh(arg.x), Math.tanh(arg.y), Math.tanh(arg.z), Math.tanh(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="asinh">
<span class="show-code">Code</span>
<strong>asinh</strong>(arg) <a class="anchor-link" href="#asinh"
title="Permalink to null.asinh">#</a></h4>
<div class="doc">
<p>Returns arc hyperbolic sine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic asinh(Dynamic arg) {
if (arg is num) {
return Math.asinh(arg);
}
if (arg is vec2) {
return new vec2(Math.asinh(arg.x), Math.asinh(arg.y));
}
if (arg is vec3) {
return new vec3(Math.asinh(arg.x), Math.asinh(arg.y), Math.asinh(arg.z));
}
if (arg is vec4) {
return new vec4(Math.asinh(arg.x), Math.asinh(arg.y), Math.asinh(arg.z), Math.asinh(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="acosh">
<span class="show-code">Code</span>
<strong>acosh</strong>(arg) <a class="anchor-link" href="#acosh"
title="Permalink to null.acosh">#</a></h4>
<div class="doc">
<p>Returns arc hyperbolic cosine of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic acosh(Dynamic arg) {
if (arg is num) {
return Math.acosh(arg);
}
if (arg is vec2) {
return new vec2(Math.acosh(arg.x), Math.acosh(arg.y));
}
if (arg is vec3) {
return new vec3(Math.acosh(arg.x), Math.acosh(arg.y), Math.acosh(arg.z));
}
if (arg is vec4) {
return new vec4(Math.acosh(arg.x), Math.acosh(arg.y), Math.acosh(arg.z), Math.acosh(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="atanh">
<span class="show-code">Code</span>
<strong>atanh</strong>(arg) <a class="anchor-link" href="#atanh"
title="Permalink to null.atanh">#</a></h4>
<div class="doc">
<p>Returns arc hyperbolic tangent of
<span class="param">arg</span>. Return type matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic atanh(Dynamic arg) {
if (arg is num) {
return Math.atanh(arg);
}
if (arg is vec2) {
return new vec2(Math.atanh(arg.x), Math.atanh(arg.y));
}
if (arg is vec3) {
return new vec3(Math.atanh(arg.x), Math.atanh(arg.y), Math.atanh(arg.z));
}
if (arg is vec4) {
return new vec4(Math.atanh(arg.x), Math.atanh(arg.y), Math.atanh(arg.z), Math.atanh(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="radians">
<span class="show-code">Code</span>
<strong>radians</strong>(arg) <a class="anchor-link" href="#radians"
title="Permalink to null.radians">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">arg</span> converted from degrees to radians. Return types matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic radians(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.radians(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.radians(arg.x), _ScalerHelpers.radians(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.radians(arg.x), _ScalerHelpers.radians(arg.y), _ScalerHelpers.radians(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.radians(arg.x), _ScalerHelpers.radians(arg.y), _ScalerHelpers.radians(arg.z), _ScalerHelpers.radians(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="degrees">
<span class="show-code">Code</span>
<strong>degrees</strong>(arg) <a class="anchor-link" href="#degrees"
title="Permalink to null.degrees">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">arg</span> converted from radians to degrees. Return types matches the type of
<span class="param">arg</span></p>
<pre class="source">
Dynamic degrees(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.degrees(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.degrees(arg.x), _ScalerHelpers.degrees(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.degrees(arg.x), _ScalerHelpers.degrees(arg.y), _ScalerHelpers.degrees(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.degrees(arg.x), _ScalerHelpers.degrees(arg.y), _ScalerHelpers.degrees(arg.z), _ScalerHelpers.degrees(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="pow">
<span class="show-code">Code</span>
<strong>pow</strong>(x, y) <a class="anchor-link" href="#pow"
title="Permalink to null.pow">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">x</span> raised to the exponent
<span class="param">y</span>. Supports vectors and numbers.</p>
<pre class="source">
Dynamic pow(Dynamic x, Dynamic y) {
if (x is num) {
return Math.pow(x, y);
}
if (x is vec2) {
return new vec2(Math.pow(x.x, y.x), Math.pow(x.y, y.y));
}
if (x is vec3) {
return new vec3(Math.pow(x.x, y.x), Math.pow(x.y, y.y), Math.pow(x.z, y.z));
}
if (x is vec4) {
return new vec4(Math.pow(x.x, y.x), Math.pow(x.y, y.y), Math.pow(x.z, y.z), Math.pow(x.w, y.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="exp">
<span class="show-code">Code</span>
<strong>exp</strong>(arg) <a class="anchor-link" href="#exp"
title="Permalink to null.exp">#</a></h4>
<div class="doc">
<p>Returns <em>e</em> raised to the exponent
<span class="param">arg</span>. Supports vectors and numbers.</p>
<pre class="source">
Dynamic exp(Dynamic arg) {
if (arg is num) {
return Math.exp(arg);
}
if (arg is vec2) {
return new vec2(Math.exp(arg.x), Math.exp(arg.y));
}
if (arg is vec3) {
return new vec3(Math.exp(arg.x), Math.exp(arg.y), Math.exp(arg.z));
}
if (arg is vec4) {
return new vec4(Math.exp(arg.x), Math.exp(arg.y), Math.exp(arg.z), Math.exp(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="log">
<span class="show-code">Code</span>
<strong>log</strong>(arg) <a class="anchor-link" href="#log"
title="Permalink to null.log">#</a></h4>
<div class="doc">
<p>Returns the logarithm of
<span class="param">arg</span> base <em>e</em>. Supports vectors and numbers.</p>
<pre class="source">
Dynamic log(Dynamic arg) {
if (arg is num) {
return Math.log(arg);
}
if (arg is vec2) {
return new vec2(Math.log(arg.x), Math.log(arg.y));
}
if (arg is vec3) {
return new vec3(Math.log(arg.x), Math.log(arg.y), Math.log(arg.z));
}
if (arg is vec4) {
return new vec4(Math.log(arg.x), Math.log(arg.y), Math.log(arg.z), Math.log(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="exp2">
<span class="show-code">Code</span>
<strong>exp2</strong>(arg) <a class="anchor-link" href="#exp2"
title="Permalink to null.exp2">#</a></h4>
<div class="doc">
<p>Returns <em>2</em> raised to the exponent
<span class="param">arg</span>. Supports vectors and numbers.</p>
<pre class="source">
Dynamic exp2(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.exp2(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.exp2(arg.x), _ScalerHelpers.exp2(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.exp2(arg.x), _ScalerHelpers.exp2(arg.y), _ScalerHelpers.exp2(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.exp2(arg.x), _ScalerHelpers.exp2(arg.y), _ScalerHelpers.exp2(arg.z), _ScalerHelpers.exp2(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="log2">
<span class="show-code">Code</span>
<strong>log2</strong>(arg) <a class="anchor-link" href="#log2"
title="Permalink to null.log2">#</a></h4>
<div class="doc">
<p>Returns the logarithm of
<span class="param">arg</span> base <em>2</em>. Supports vectors and numbers.</p>
<pre class="source">
Dynamic log2(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.log2(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.log2(arg.x), _ScalerHelpers.log2(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.log2(arg.x), _ScalerHelpers.log2(arg.y), _ScalerHelpers.log2(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.log2(arg.x), _ScalerHelpers.log2(arg.y), _ScalerHelpers.log2(arg.z), _ScalerHelpers.log2(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="sqrt">
<span class="show-code">Code</span>
<strong>sqrt</strong>(arg) <a class="anchor-link" href="#sqrt"
title="Permalink to null.sqrt">#</a></h4>
<div class="doc">
<p>Returns the square root of
<span class="param">arg</span>.</p>
<pre class="source">
Dynamic sqrt(Dynamic arg) {
if (arg is num) {
return Math.sqrt(arg);
}
if (arg is vec2) {
return new vec2(Math.sqrt(arg.x), Math.sqrt(arg.y));
}
if (arg is vec3) {
return new vec3(Math.sqrt(arg.x), Math.sqrt(arg.y), Math.sqrt(arg.z));
}
if (arg is vec4) {
return new vec4(Math.sqrt(arg.x), Math.sqrt(arg.y), Math.sqrt(arg.z), Math.sqrt(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="inversesqrt">
<span class="show-code">Code</span>
<strong>inversesqrt</strong>(arg) <a class="anchor-link" href="#inversesqrt"
title="Permalink to null.inversesqrt">#</a></h4>
<div class="doc">
<p>Returns the inverse square root of
<span class="param">arg</span>. Supports vectors and numbers.</p>
<pre class="source">
Dynamic inversesqrt(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.inversesqrt(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.inversesqrt(arg.x), _ScalerHelpers.inversesqrt(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.inversesqrt(arg.x), _ScalerHelpers.inversesqrt(arg.y), _ScalerHelpers.inversesqrt(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.inversesqrt(arg.x), _ScalerHelpers.inversesqrt(arg.y), _ScalerHelpers.inversesqrt(arg.z), _ScalerHelpers.inversesqrt(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="abs">
<span class="show-code">Code</span>
<strong>abs</strong>(arg) <a class="anchor-link" href="#abs"
title="Permalink to null.abs">#</a></h4>
<div class="doc">
<p>Returns absolute value of
<span class="param">arg</span>.</p>
<pre class="source">
Dynamic abs(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.abs(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.abs(arg.x), _ScalerHelpers.abs(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.abs(arg.x), _ScalerHelpers.abs(arg.y), _ScalerHelpers.abs(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.abs(arg.x), _ScalerHelpers.abs(arg.y), _ScalerHelpers.abs(arg.z), _ScalerHelpers.abs(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="sign">
<span class="show-code">Code</span>
<strong>sign</strong>(arg) <a class="anchor-link" href="#sign"
title="Permalink to null.sign">#</a></h4>
<div class="doc">
<p>Returns 1.0 or 0.0 or -1.0 depending on sign of
<span class="param">arg</span>.</p>
<pre class="source">
Dynamic sign(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.sign(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.sign(arg.x), _ScalerHelpers.sign(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.sign(arg.x), _ScalerHelpers.sign(arg.y), _ScalerHelpers.sign(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.sign(arg.x), _ScalerHelpers.sign(arg.y), _ScalerHelpers.sign(arg.z), _ScalerHelpers.sign(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="floor">
<span class="show-code">Code</span>
<strong>floor</strong>(arg) <a class="anchor-link" href="#floor"
title="Permalink to null.floor">#</a></h4>
<div class="doc">
<p>Returns floor value of
<span class="param">arg</span>.</p>
<pre class="source">
Dynamic floor(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.floor(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.floor(arg.x), _ScalerHelpers.floor(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.floor(arg.x), _ScalerHelpers.floor(arg.y), _ScalerHelpers.floor(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.floor(arg.x), _ScalerHelpers.floor(arg.y), _ScalerHelpers.floor(arg.z), _ScalerHelpers.floor(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="trunc">
<span class="show-code">Code</span>
<strong>trunc</strong>(arg) <a class="anchor-link" href="#trunc"
title="Permalink to null.trunc">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">arg</span> truncated.</p>
<pre class="source">
Dynamic trunc(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.truncate(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.truncate(arg.x), _ScalerHelpers.truncate(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.truncate(arg.x), _ScalerHelpers.truncate(arg.y), _ScalerHelpers.truncate(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.truncate(arg.x), _ScalerHelpers.truncate(arg.y), _ScalerHelpers.truncate(arg.z), _ScalerHelpers.truncate(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="round">
<span class="show-code">Code</span>
<strong>round</strong>(arg) <a class="anchor-link" href="#round"
title="Permalink to null.round">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">arg</span> rounded to nearest integer.</p>
<pre class="source">
Dynamic round(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.round(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.round(arg.x), _ScalerHelpers.round(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.round(arg.x), _ScalerHelpers.round(arg.y), _ScalerHelpers.round(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.round(arg.x), _ScalerHelpers.round(arg.y), _ScalerHelpers.round(arg.z), _ScalerHelpers.round(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="roundEven">
<span class="show-code">Code</span>
<strong>roundEven</strong>(arg) <a class="anchor-link" href="#roundEven"
title="Permalink to null.roundEven">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">arg</span> rounded to nearest even integer.</p>
<pre class="source">
Dynamic roundEven(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.roundEven(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.roundEven(arg.x), _ScalerHelpers.roundEven(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.roundEven(arg.x), _ScalerHelpers.roundEven(arg.y), _ScalerHelpers.roundEven(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.roundEven(arg.x), _ScalerHelpers.roundEven(arg.y), _ScalerHelpers.roundEven(arg.z), _ScalerHelpers.roundEven(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="ceil">
<span class="show-code">Code</span>
<strong>ceil</strong>(arg) <a class="anchor-link" href="#ceil"
title="Permalink to null.ceil">#</a></h4>
<div class="doc">
<p>Returns ceiling of
<span class="param">arg</span></p>
<pre class="source">
Dynamic ceil(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.ceil(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.ceil(arg.x), _ScalerHelpers.ceil(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.ceil(arg.x), _ScalerHelpers.ceil(arg.y), _ScalerHelpers.ceil(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.ceil(arg.x), _ScalerHelpers.ceil(arg.y), _ScalerHelpers.ceil(arg.z), _ScalerHelpers.ceil(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="fract">
<span class="show-code">Code</span>
<strong>fract</strong>(arg) <a class="anchor-link" href="#fract"
title="Permalink to null.fract">#</a></h4>
<div class="doc">
<p>Returns fraction of
<span class="param">arg</span></p>
<pre class="source">
Dynamic fract(Dynamic arg) {
if (arg is num) {
return _ScalerHelpers.fract(arg);
}
if (arg is vec2) {
return new vec2(_ScalerHelpers.fract(arg.x), _ScalerHelpers.fract(arg.y));
}
if (arg is vec3) {
return new vec3(_ScalerHelpers.fract(arg.x), _ScalerHelpers.fract(arg.y), _ScalerHelpers.fract(arg.z));
}
if (arg is vec4) {
return new vec4(_ScalerHelpers.fract(arg.x), _ScalerHelpers.fract(arg.y), _ScalerHelpers.fract(arg.z), _ScalerHelpers.fract(arg.w));
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="mod">
<span class="show-code">Code</span>
<strong>mod</strong>(x, y) <a class="anchor-link" href="#mod"
title="Permalink to null.mod">#</a></h4>
<div class="doc">
<p>Returns
<span class="param">x</span> mod
<span class="param">y</span></p>
<pre class="source">
Dynamic mod(Dynamic x, Dynamic y) {
if (x is num) {
return _ScalerHelpers.mod(x, y);
}
if (x is vec2) {
return new vec2(_ScalerHelpers.mod(x.x, y.x), _ScalerHelpers.mod(x.y, y.y));
}
if (x is vec3) {
return new vec3(_ScalerHelpers.mod(x.x, y.x), _ScalerHelpers.mod(x.y, y.y), _ScalerHelpers.mod(x.z, y.z));
}
if (x is vec4) {
return new vec4(_ScalerHelpers.mod(x.x, y.x), _ScalerHelpers.mod(x.y, y.y), _ScalerHelpers.mod(x.z, y.z), _ScalerHelpers.mod(x.w, y.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="min">
<span class="show-code">Code</span>
<strong>min</strong>(x, y) <a class="anchor-link" href="#min"
title="Permalink to null.min">#</a></h4>
<div class="doc">
<p>Returns component wise minimum of
<span class="param">x</span> and
<span class="param">y</span></p>
<pre class="source">
Dynamic min(Dynamic x, Dynamic y) {
if (x is num) {
return Math.min(x, y);
}
if (x is vec2) {
return new vec2(Math.min(x.x, y.x), Math.min(x.y, y.y));
}
if (x is vec3) {
return new vec3(Math.min(x.x, y.x), Math.min(x.y, y.y), Math.min(x.z, y.z));
}
if (x is vec4) {
return new vec4(Math.min(x.x, y.x), Math.min(x.y, y.y), Math.min(x.z, y.z), Math.min(x.w, y.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="max">
<span class="show-code">Code</span>
<strong>max</strong>(x, y) <a class="anchor-link" href="#max"
title="Permalink to null.max">#</a></h4>
<div class="doc">
<p>Returns component wise maximum of
<span class="param">x</span> and
<span class="param">y</span></p>
<pre class="source">
Dynamic max(Dynamic x, Dynamic y) {
if (x is num) {
return Math.max(x, y);
}
if (x is vec2) {
return new vec2(Math.max(x.x, y.x), Math.max(x.y, y.y));
}
if (x is vec3) {
return new vec3(Math.max(x.x, y.x), Math.max(x.y, y.y), Math.max(x.z, y.z));
}
if (x is vec4) {
return new vec4(Math.max(x.x, y.x), Math.max(x.y, y.y), Math.max(x.z, y.z), Math.max(x.w, y.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="clamp">
<span class="show-code">Code</span>
<strong>clamp</strong>(x, min_, max_) <a class="anchor-link" href="#clamp"
title="Permalink to null.clamp">#</a></h4>
<div class="doc">
<p>Component wise clamp of
<span class="param">x</span> between
<span class="param">min_</span> and
<span class="param">max_</span></p>
<pre class="source">
Dynamic clamp(Dynamic x, Dynamic min_, Dynamic max_) {
if (x is num) {
return _ScalerHelpers.clamp(x, min_, max_);
}
if (x is vec2) {
return new vec2(_ScalerHelpers.clamp(x.x, min_.x, max_.x), _ScalerHelpers.clamp(x.y, min_.y, max_.y));
}
if (x is vec3) {
return new vec3(_ScalerHelpers.clamp(x.x, min_.x, max_.x), _ScalerHelpers.clamp(x.y, min_.y, max_.y), _ScalerHelpers.clamp(x.z, min_.z, max_.z));
}
if (x is vec4) {
return new vec4(_ScalerHelpers.clamp(x.x, min_.x, max_.x), _ScalerHelpers.clamp(x.y, min_.y, max_.y), _ScalerHelpers.clamp(x.z, min_.z, max_.z), _ScalerHelpers.clamp(x.w, min_.w, max_.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="mix">
<span class="show-code">Code</span>
<strong>mix</strong>(x, y, t) <a class="anchor-link" href="#mix"
title="Permalink to null.mix">#</a></h4>
<div class="doc">
<p>Linear interpolation between
<span class="param">x</span> and
<span class="param">y</span> with
<span class="param">t</span>.
<span class="param">t</span> must be between 0.0 and 1.0.</p>
<pre class="source">
Dynamic mix(Dynamic x, Dynamic y, Dynamic t) {
if (x is num) {
return _ScalerHelpers.mix(x, y, t);
}
if (x is vec2) {
return new vec2(_ScalerHelpers.mix(x.x, y.x, t.x), _ScalerHelpers.mix(x.y, y.y, t.y));
}
if (x is vec3) {
return new vec3(_ScalerHelpers.mix(x.x, y.x, t.x), _ScalerHelpers.mix(x.y, y.y, t.y), _ScalerHelpers.mix(x.z, y.z, t.z));
}
if (x is vec4) {
return new vec4(_ScalerHelpers.mix(x.x, y.x, t.x), _ScalerHelpers.mix(x.y, y.y, t.y), _ScalerHelpers.mix(x.z, y.z, t.z), _ScalerHelpers.mix(x.w, y.w, t.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="step">
<span class="show-code">Code</span>
<strong>step</strong>(x, y) <a class="anchor-link" href="#step"
title="Permalink to null.step">#</a></h4>
<div class="doc">
<p>Returns 0.0 if x &lt;
<span class="param">y</span> and 1.0 otherwise.</p>
<pre class="source">
Dynamic step(Dynamic x, Dynamic y) {
if (x is num) {
return _ScalerHelpers.step(x, y);
}
if (x is vec2) {
return new vec2(_ScalerHelpers.step(x.x, y.x), _ScalerHelpers.step(x.y, y.y));
}
if (x is vec3) {
return new vec3(_ScalerHelpers.step(x.x, y.x), _ScalerHelpers.step(x.y, y.y), _ScalerHelpers.step(x.z, y.z));
}
if (x is vec4) {
return new vec4(_ScalerHelpers.step(x.x, y.x), _ScalerHelpers.step(x.y, y.y), _ScalerHelpers.step(x.z, y.z), _ScalerHelpers.step(x.w, y.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="smoothstep">
<span class="show-code">Code</span>
<strong>smoothstep</strong>(edge0, edge1, x) <a class="anchor-link" href="#smoothstep"
title="Permalink to null.smoothstep">#</a></h4>
<div class="doc">
<p>Hermite intpolation between
<span class="param">edge0</span> and
<span class="param">edge1</span>.
<span class="param">edge0</span> &lt;
<span class="param">x</span> &lt;
<span class="param">edge1</span>.</p>
<pre class="source">
Dynamic smoothstep(Dynamic edge0, Dynamic edge1, Dynamic x) {
if (x is num) {
return _ScalerHelpers.smoothstep(edge0, edge1, x);
}
if (x is vec2) {
return new vec2(_ScalerHelpers.smoothstep(edge0.x, edge1.x, x.x), _ScalerHelpers.smoothstep(edge0.y, edge1.y, x.y));
}
if (x is vec3) {
return new vec3(_ScalerHelpers.smoothstep(edge0.x, edge1.x, x.x), _ScalerHelpers.smoothstep(edge0.y, edge1.y, x.y), _ScalerHelpers.smoothstep(edge0.z, edge1.z, x.z));
}
if (x is vec4) {
return new vec4(_ScalerHelpers.smoothstep(edge0.x, edge1.x, x.x), _ScalerHelpers.smoothstep(edge0.y, edge1.y, x.y), _ScalerHelpers.smoothstep(edge0.z, edge1.z, x.z), _ScalerHelpers.smoothstep(edge0.w, edge1.w, x.w));
}
throw new IllegalArgumentException(x);
}
</pre>
</div>
</div>
<div class="method"><h4 id="atan">
<span class="show-code">Code</span>
<strong>atan</strong>(arg, [arg2]) <a class="anchor-link" href="#atan"
title="Permalink to null.atan">#</a></h4>
<div class="doc">
<p>Returns atan(
<span class="param">arg</span>) or atan(
<span class="param">arg</span>/
<span class="param">arg2</span>)</p>
<p>Arguments can be of type <code>num</code>, <a class="crossref" href="VectorMath/vec2.html">vec2</a>, <a class="crossref" href="VectorMath/vec3.html">vec3</a> or <a class="crossref" href="VectorMath/vec4.html">vec4</a>
Return type matches input argument type</p>
<pre class="source">
Dynamic atan(Dynamic arg, [Dynamic arg2]) {
if (arg2 == null) {
if (arg is num) {
return Math.atan(arg);
}
if (arg is vec2) {
return new vec2(Math.atan(arg.x), Math.atan(arg.y));
}
if (arg is vec3) {
return new vec3(Math.atan(arg.x), Math.atan(arg.y), Math.atan(arg.z));
}
if (arg is vec4) {
return new vec4(Math.atan(arg.x), Math.atan(arg.y), Math.atan(arg.z), Math.atan(arg.w));
}
} else {
if (arg is num) {
return Math.atan2(arg, arg2);
}
if (arg is vec2) {
return new vec2(Math.atan2(arg.x, arg2.x), Math.atan2(arg.y, arg2.y));
}
if (arg is vec3) {
return new vec3(Math.atan2(arg.x, arg2.x), Math.atan2(arg.y, arg2.y), Math.atan2(arg.z, arg2.z));
}
if (arg is vec4) {
return new vec4(Math.atan2(arg.x, arg2.x), Math.atan2(arg.y, arg2.y), Math.atan2(arg.z, arg2.z), Math.atan2(arg.w, arg2.w));
}
}
throw new IllegalArgumentException(arg);
}
</pre>
</div>
</div>
<div class="method"><h4 id="makeLookAt">
<span class="show-code">Code</span>
<a href="VectorMath/mat4x4.html">mat4x4</a> <strong>makeLookAt</strong>(<a href="VectorMath/vec3.html">vec3</a> eyePosition, <a href="VectorMath/vec3.html">vec3</a> lookAtPosition, <a href="VectorMath/vec3.html">vec3</a> upDirection) <a class="anchor-link" href="#makeLookAt"
title="Permalink to null.makeLookAt">#</a></h4>
<div class="doc">
<p>Returns an OpenGL LookAt matrix</p>
<pre class="source">
mat4x4 makeLookAt(vec3 eyePosition, vec3 lookAtPosition, vec3 upDirection) {
vec3 z = lookAtPosition - eyePosition;
z.normalize();
vec3 x = upDirection.cross(z);
x.normalize();
vec3 y = z.cross(x);
y.normalize();
mat4x4 r = new mat4x4();
r[0].xyz = x;
r[1].xyz = y;
r[2].xyz = z;
r[3].w = 1.0;
vec3 rotatedEye = r * eyePosition;
r[3].xyz = rotatedEye;
return r;
}
</pre>
</div>
</div>
<div class="method"><h4 id="makePerspective">
<span class="show-code">Code</span>
<a href="VectorMath/mat4x4.html">mat4x4</a> <strong>makePerspective</strong>(<a href="dart_core/num.html">num</a> fov_y_radians, <a href="dart_core/num.html">num</a> aspect_ratio, <a href="dart_core/num.html">num</a> znear, <a href="dart_core/num.html">num</a> zfar) <a class="anchor-link" href="#makePerspective"
title="Permalink to null.makePerspective">#</a></h4>
<div class="doc">
<p>Returns an OpenGL perspective camera projection matrix</p>
<pre class="source">
mat4x4 makePerspective(num fov_y_radians, num aspect_ratio, num znear, num zfar) {
num tan_fov = tan(fov_y_radians * 0.5);
num height = 1.0/tan_fov;
num width = height / aspect_ratio;
num zf_sub_zn = zfar - znear;
mat4x4 r = new mat4x4();
r[0].x = width;
r[1].y = height;
r[2].z = zfar/zf_sub_zn;
r[3].z = 1.0;
r[3].w = 0.0;
return r;
}
</pre>
</div>
</div>
<div class="method"><h4 id="makeOrthographic">
<span class="show-code">Code</span>
<a href="VectorMath/mat4x4.html">mat4x4</a> <strong>makeOrthographic</strong>(<a href="dart_core/num.html">num</a> left, <a href="dart_core/num.html">num</a> right, <a href="dart_core/num.html">num</a> bottom, <a href="dart_core/num.html">num</a> top, <a href="dart_core/num.html">num</a> znear, <a href="dart_core/num.html">num</a> zfar) <a class="anchor-link" href="#makeOrthographic"
title="Permalink to null.makeOrthographic">#</a></h4>
<div class="doc">
<p>Returns an OpenGL orthographic camera projection matrix</p>
<pre class="source">
mat4x4 makeOrthographic(num left, num right, num bottom, num top, num znear, num zfar) {
num rml = right - left;
num rpl = right + left;
num tmb = top - bottom;
num tpb = top + bottom;
num fmn = zfar - znear;
num fpn = zfar + znear;
mat4x4 r = new mat4x4();
r[0].x = 2.0/rml;
r[1].y = 2.0/tmb;
r[2].z = 2.0/fmn;
r[3].x = rpl/rml;
r[3].y = tpb/tmb;
r[3].z = fpn/fmn;
r[3].w = 1.0;
return r;
}
</pre>
</div>
</div>
<div class="method"><h4 id="makePlaneProjection">
<span class="show-code">Code</span>
<a href="VectorMath/mat4x4.html">mat4x4</a> <strong>makePlaneProjection</strong>(<a href="VectorMath/vec3.html">vec3</a> planeNormal, <a href="VectorMath/vec3.html">vec3</a> planePoint) <a class="anchor-link" href="#makePlaneProjection"
title="Permalink to null.makePlaneProjection">#</a></h4>
<div class="doc">
<p>Returns a transformation matrix that transforms points onto the plane specified with
<span class="param">planeNormal</span> and
<span class="param">planePoint</span></p>
<pre class="source">
mat4x4 makePlaneProjection(vec3 planeNormal, vec3 planePoint) {
vec4 v = new vec4(planeNormal, 0.0);
mat4x4 outer = new mat4x4.outer(v, v);
mat4x4 r = new mat4x4();
r = r - outer;
vec3 scaledNormal = (planeNormal * dot(planePoint, planeNormal));
vec4 T = new vec4(scaledNormal, 1.0);
r.col3 = T;
return r;
}
</pre>
</div>
</div>
<div class="method"><h4 id="makePlaneReflection">
<span class="show-code">Code</span>
<a href="VectorMath/mat4x4.html">mat4x4</a> <strong>makePlaneReflection</strong>(<a href="VectorMath/vec3.html">vec3</a> planeNormal, <a href="VectorMath/vec3.html">vec3</a> planePoint) <a class="anchor-link" href="#makePlaneReflection"
title="Permalink to null.makePlaneReflection">#</a></h4>
<div class="doc">
<p>Returns a transformation matrix that transforms points by reflecting them in the plane specified with
<span class="param">planeNormal</span> and
<span class="param">planePoint</span></p>
<pre class="source">
mat4x4 makePlaneReflection(vec3 planeNormal, vec3 planePoint) {
vec4 v = new vec4(planeNormal, 0.0);
mat4x4 outer = new mat4x4.outer(v,v);
outer = outer * 2.0;
mat4x4 r = new mat4x4();
r = r - outer;
vec3 scaledNormal = (planeNormal * 2.0 * dot(planePoint, planeNormal));
vec4 T = new vec4(scaledNormal, 1.0);
r.col3 = T;
return r;
}
</pre>
</div>
</div>
<h3>Classes</h3>
<div class="type">
<h4>
<a href="VectorMath/vec2.html"><strong>vec2</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/vec3.html"><strong>vec3</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/vec4.html"><strong>vec4</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat2x2.html"><strong>mat2x2</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat2x3.html"><strong>mat2x3</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat2x4.html"><strong>mat2x4</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat3x2.html"><strong>mat3x2</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat3x3.html"><strong>mat3x3</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat3x4.html"><strong>mat3x4</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat4x2.html"><strong>mat4x2</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat4x3.html"><strong>mat4x3</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/mat4x4.html"><strong>mat4x4</strong></a>
</h4>
</div>
<div class="type">
<h4>
<a href="VectorMath/quat.html"><strong>quat</strong></a>
</h4>
</div>
</div>
<div class="clear"></div>
</div>
<div class="footer"></div>
</body></html>