atum
Version:
A Procedural Graph Based Javascript Library
866 lines (626 loc) • 28.6 kB
HTML
<html>
<head>
<meta charset="utf-8">
<title>Source: utilities/Rand.js</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<script src="scripts/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/bootstrap.min.css">
<link type="text/css" rel="stylesheet" href="styles/jaguar.css">
<script>
var config = {"monospaceLinks":false,"cleverLinks":false,"default":{"outputSourceFiles":true}};
</script>
</head>
<body>
<div id="wrap" class="clearfix">
<div class="navigation">
<h3 class="applicationName"><a href="index.html"></a></h3>
<div class="search">
<input id="search" type="text" class="form-control input-sm" placeholder="Search Documentations">
</div>
<ul class="list">
<li class="item" data-name="Center">
<span class="title">
<a href="Center.html">Center</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Center#add"><a href="Center.html#add">add</a></li>
<li data-name="Center#cross"><a href="Center.html#cross">cross</a></li>
<li data-name="Center#divide"><a href="Center.html#divide">divide</a></li>
<li data-name="Center#dot"><a href="Center.html#dot">dot</a></li>
<li data-name="Center#key"><a href="Center.html#key">key</a></li>
<li data-name="Center#list"><a href="Center.html#list">list</a></li>
<li data-name="Center#magnitude"><a href="Center.html#magnitude">magnitude</a></li>
<li data-name="Center#multiply"><a href="Center.html#multiply">multiply</a></li>
<li data-name="Center#normalize"><a href="Center.html#normalize">normalize</a></li>
<li data-name="Center#perpendiculars"><a href="Center.html#perpendiculars">perpendiculars</a></li>
<li data-name="Center#rotate"><a href="Center.html#rotate">rotate</a></li>
<li data-name="Center#subtract"><a href="Center.html#subtract">subtract</a></li>
<li data-name="Center#toString"><a href="Center.html#toString">toString</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Corner">
<span class="title">
<a href="Corner.html">Corner</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Corner#add"><a href="Corner.html#add">add</a></li>
<li data-name="Corner#cross"><a href="Corner.html#cross">cross</a></li>
<li data-name="Corner#divide"><a href="Corner.html#divide">divide</a></li>
<li data-name="Corner#dot"><a href="Corner.html#dot">dot</a></li>
<li data-name="Corner#key"><a href="Corner.html#key">key</a></li>
<li data-name="Corner#list"><a href="Corner.html#list">list</a></li>
<li data-name="Corner#magnitude"><a href="Corner.html#magnitude">magnitude</a></li>
<li data-name="Corner#multiply"><a href="Corner.html#multiply">multiply</a></li>
<li data-name="Corner#normalize"><a href="Corner.html#normalize">normalize</a></li>
<li data-name="Corner#perpendiculars"><a href="Corner.html#perpendiculars">perpendiculars</a></li>
<li data-name="Corner#rotate"><a href="Corner.html#rotate">rotate</a></li>
<li data-name="Corner#subtract"><a href="Corner.html#subtract">subtract</a></li>
<li data-name="Corner#toString"><a href="Corner.html#toString">toString</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Diagram">
<span class="title">
<a href="Diagram.html">Diagram</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Edge">
<span class="title">
<a href="Edge.html">Edge</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Line">
<span class="title">
<a href="Line.html">Line</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Map">
<span class="title">
<a href="Map.html">Map</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Map#generate"><a href="Map.html#generate">generate</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="PointDistribution">
<span class="title">
<a href="PointDistribution.html">PointDistribution</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="PointDistribution.exports.circular"><a href="PointDistribution.html#.exports.circular">exports.circular</a></li>
<li data-name="PointDistribution.exports.hexagon"><a href="PointDistribution.html#.exports.hexagon">exports.hexagon</a></li>
<li data-name="PointDistribution.exports.jitteredGrid"><a href="PointDistribution.html#.exports.jitteredGrid">exports.jitteredGrid</a></li>
<li data-name="PointDistribution.exports.poisson"><a href="PointDistribution.html#.exports.poisson">exports.poisson</a></li>
<li data-name="PointDistribution.exports.random"><a href="PointDistribution.html#.exports.random">exports.random</a></li>
<li data-name="PointDistribution.exports.recursiveWang"><a href="PointDistribution.html#.exports.recursiveWang">exports.recursiveWang</a></li>
<li data-name="PointDistribution.exports.square"><a href="PointDistribution.html#.exports.square">exports.square</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Polygon">
<span class="title">
<a href="Polygon.html">Polygon</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Polygon#centroid"><a href="Polygon.html#centroid">centroid</a></li>
<li data-name="Polygon#inset"><a href="Polygon.html#inset">inset</a></li>
<li data-name="Polygon#isConvex"><a href="Polygon.html#isConvex">isConvex</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Rand">
<span class="title">
<a href="Rand.html">Rand</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Rand.rand"><a href="Rand.html#.rand">rand</a></li>
<li data-name="Rand.randHex"><a href="Rand.html#.randHex">randHex</a></li>
<li data-name="Rand.randHexColor"><a href="Rand.html#.randHexColor">randHexColor</a></li>
<li data-name="Rand.randInt"><a href="Rand.html#.randInt">randInt</a></li>
<li data-name="Rand.randRange"><a href="Rand.html#.randRange">randRange</a></li>
<li data-name="Rand.setSeed"><a href="Rand.html#.setSeed">setSeed</a></li>
<li data-name="Rand.vector"><a href="Rand.html#.vector">vector</a></li>
<li data-name="Rand#rand"><a href="Rand.html#rand">rand</a></li>
<li data-name="Rand#randHex"><a href="Rand.html#randHex">randHex</a></li>
<li data-name="Rand#randHexColor"><a href="Rand.html#randHexColor">randHexColor</a></li>
<li data-name="Rand#randInt"><a href="Rand.html#randInt">randInt</a></li>
<li data-name="Rand#randRange"><a href="Rand.html#randRange">randRange</a></li>
<li data-name="Rand#setSeed"><a href="Rand.html#setSeed">setSeed</a></li>
<li data-name="Rand#vector"><a href="Rand.html#vector">vector</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Rectangle">
<span class="title">
<a href="Rectangle.html">Rectangle</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Rectangle#centroid"><a href="Rectangle.html#centroid">centroid</a></li>
<li data-name="Rectangle#inset"><a href="Rectangle.html#inset">inset</a></li>
<li data-name="Rectangle#isConvex"><a href="Rectangle.html#isConvex">isConvex</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Redist">
<span class="title">
<a href="Redist.html">Redist</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Redist.exports.exp"><a href="Redist.html#.exports.exp">exports.exp</a></li>
<li data-name="Redist.exports.identity"><a href="Redist.html#.exports.identity">exports.identity</a></li>
<li data-name="Redist.exports.inverse"><a href="Redist.html#.exports.inverse">exports.inverse</a></li>
<li data-name="Redist.exports.pow"><a href="Redist.html#.exports.pow">exports.pow</a></li>
<li data-name="Redist.exports.step"><a href="Redist.html#.exports.step">exports.step</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Shape">
<span class="title">
<a href="Shape.html">Shape</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Triangle">
<span class="title">
<a href="Triangle.html">Triangle</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Triangle#centroid"><a href="Triangle.html#centroid">centroid</a></li>
<li data-name="Triangle#inset"><a href="Triangle.html#inset">inset</a></li>
<li data-name="Triangle#isConvex"><a href="Triangle.html#isConvex">isConvex</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="Vector">
<span class="title">
<a href="Vector.html">Vector</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
<span class="subtitle">Methods</span>
<li data-name="Vector.add"><a href="Vector.html#.add">add</a></li>
<li data-name="Vector.angle"><a href="Vector.html#.angle">angle</a></li>
<li data-name="Vector.avg"><a href="Vector.html#.avg">avg</a></li>
<li data-name="Vector.copy"><a href="Vector.html#.copy">copy</a></li>
<li data-name="Vector.cross"><a href="Vector.html#.cross">cross</a></li>
<li data-name="Vector.dist2"><a href="Vector.html#.dist2">dist2</a></li>
<li data-name="Vector.distance"><a href="Vector.html#.distance">distance</a></li>
<li data-name="Vector.distToSeg"><a href="Vector.html#.distToSeg">distToSeg</a></li>
<li data-name="Vector.distToSegSquared"><a href="Vector.html#.distToSegSquared">distToSegSquared</a></li>
<li data-name="Vector.dot"><a href="Vector.html#.dot">dot</a></li>
<li data-name="Vector.down"><a href="Vector.html#.down">down</a></li>
<li data-name="Vector.left"><a href="Vector.html#.left">left</a></li>
<li data-name="Vector.midpoint"><a href="Vector.html#.midpoint">midpoint</a></li>
<li data-name="Vector.proj"><a href="Vector.html#.proj">proj</a></li>
<li data-name="Vector.right"><a href="Vector.html#.right">right</a></li>
<li data-name="Vector.subtract"><a href="Vector.html#.subtract">subtract</a></li>
<li data-name="Vector.up"><a href="Vector.html#.up">up</a></li>
<li data-name="Vector.zero"><a href="Vector.html#.zero">zero</a></li>
<li data-name="Vector#add"><a href="Vector.html#add">add</a></li>
<li data-name="Vector#cross"><a href="Vector.html#cross">cross</a></li>
<li data-name="Vector#divide"><a href="Vector.html#divide">divide</a></li>
<li data-name="Vector#dot"><a href="Vector.html#dot">dot</a></li>
<li data-name="Vector#key"><a href="Vector.html#key">key</a></li>
<li data-name="Vector#list"><a href="Vector.html#list">list</a></li>
<li data-name="Vector#magnitude"><a href="Vector.html#magnitude">magnitude</a></li>
<li data-name="Vector#multiply"><a href="Vector.html#multiply">multiply</a></li>
<li data-name="Vector#normalize"><a href="Vector.html#normalize">normalize</a></li>
<li data-name="Vector#perpendiculars"><a href="Vector.html#perpendiculars">perpendiculars</a></li>
<li data-name="Vector#rotate"><a href="Vector.html#rotate">rotate</a></li>
<li data-name="Vector#subtract"><a href="Vector.html#subtract">subtract</a></li>
<li data-name="Vector#toString"><a href="Vector.html#toString">toString</a></li>
<li data-name="Vector#toString"><a href="Vector.html#toString">toString</a></li>
</ul>
<ul class="events itemMembers">
</ul>
</li>
<li class="item" data-name="module:Atum">
<span class="title">
<a href="module-Atum.html">module:Atum</a>
</span>
<ul class="members itemMembers">
</ul>
<ul class="typedefs itemMembers">
</ul>
<ul class="methods itemMembers">
</ul>
<ul class="events itemMembers">
</ul>
</li>
</ul>
</div>
<div class="main">
<h1 class="page-title" data-filename="utilities_Rand.js.html">Source: utilities/Rand.js</h1>
<section>
<article>
<pre class="prettyprint source "><code>"use strict";
import seedRandom from "seedRandom";
import Vector from "../geometry/Vector";
class Rand {
/**
* Wrapper library for David Bau's seeded random number generator which is a
* wrapper for the Math.rand() functionality. This library is implemented to
* fill out the functionality of the random capabilities as well as build
* on the capabilities existing in the framework currently. This class can
* be used on a global or local scale.
*
* @example
* Rand.seedRandom(0); // Set the global seed
* Rand.rand(); // Predictable based off seed
*
* @example
* var rng = new Rand(0); // Set the local rng seed
* rng.rand(); // Predictable based off seed
*
* Rand.rand(); // Unpredictable since global seed is not set
*
* @see {@link https://github.com/davidbau/seedrandom}
* @param {number|string} [seed=0] The seed to be applied to the local
* random number generator
* @class Rand
*/
constructor(seed = 0) {
this.rng = seedRandom(seed);
}
/**
* Set the global seed for the seeded random number generator. After the seed has been
* set. The random numbers will be predictable and repeatable given the same
* input seed. If no seed is specified, then a random seed will be assigned to
* the random number generator using added system entropy.
*
* @export
* @param {number|string} [seed=0] The seed to be applied to the global
* random number generator
* @memberof Rand
*/
static setSeed(seed = 0) {
const options = {
global: true,
entropy: seed === undefined
};
seedRandom(seed, options);
}
/**
* Set the seed for the seeded random number generator. After the seed has been
* set. The random numbers will be predictable and repeatable given the same
* input seed. If no seed is specified, then a random seed will be assigned to
* the random number generator using added system entropy.
*
* @export
* @param {number|string} [seed=0] The seed to be applied to the RNG
*
* @memberof Rand
*/
setSeed(seed) {
const options = {
entropy: seed === undefined
};
this.rng = seedRandom(seed, options);
}
/**
* Get a random number from 0 to 1.
*
* @static
* @returns {number} random number from 0 to 1
*
* @memberof Rand
*/
static rand() {
return Math.random();
}
/**
* Get a random number from 0 to 1.
*
* @returns {number} random number from 0 to 1
*
* @memberof Rand
*/
rand() {
return this.rng();
}
/**
* Private Helper Function:
* Get a random float value in a particular range
*
* @private
* @static
* @param {any} rng The local or global rng to use (Rand or this)
* @param {any} min
* @param {any} max
*
* @memberof Rand
*/
static _randRange(rng, min, max) {
return rng.rand() * (max - min) + min;
}
/**
* Get a random float value in a particular range
*
* @static
* @param {any} min
* @param {any} max
* @returns {number} Random float number from min (inclusive)
* to max (exclusive)
*
* @memberof Rand
*/
static randRange(min, max) {
return Rand._randRange(Rand, min, max);
}
/**
* Get a random float value in a particular range
*
* @param {any} min
* @param {any} max
* @returns {number} Random float number from min (inclusive)
* to max (exclusive)
*
* @memberof Rand
*/
randRange(min, max) {
return Rand._randRange(this, min, max);
}
/**
* Private Helper Function:
* Get a random int in a particular range (min and max inclusive)
*
* @private
* @static
* @param {any} rng The local or global rng to use (Rand or this)
* @param {any} min
* @param {any} max
* @returns {number} Random float number from min (inclusive)
* to max (exclusive)
*
* @memberOf Rand
*/
static _randInt(rng, min, max) {
return Math.floor(rng.rand() * (max - min + 1)) + min;
}
/**
* Get a random int in a particular range (min and max inclusive)
*
* @static
* @param {any} min
* @param {any} max
* @returns {number} Random float number from min (inclusive)
* to max (exclusive)
*
* @memberOf Rand
*/
static randInt(min, max) {
return Rand._randInt(Rand, min, max);
}
/**
* Get a random int in a particular range (min and max inclusive)
*
* @param {any} min
* @param {any} max
* @returns {number} Random float number from min (inclusive)
* to max (exclusive)
*
* @memberOf Rand
*/
randInt(min, max) {
return Rand._randInt(this, min, max);
}
/**
* Private Helper Function:
* Get the random hex value of a color represented in the hexidecimal format
*
* @private
* @static
* @param {any} rng The local or global rng to use (Rand or this)
* @returns {hex} The random hex value in the color spectrum
*
* @memberOf Rand
*/
static _randHex(rng) {
return rng.randInt(0, 16777215);
}
/**
* Get the random hex value of a color represented in the hexidecimal format
*
* @static
* @returns {hex}
*
* @memberOf Rand
*/
static randHex() {
return Rand._randHex(Rand);
}
/**
* Get the random hex value of a color represented in the hexidecimal format
*
* @returns {hex}
*
* @memberOf Rand
*/
randHex() {
return Rand._randHex(this);
}
/**
* Private Helper Function:
* Get a random hex color string represented in "#HEXSTR" format
*
* @private
* @static
* @param {any} rng The local or global rng to use (Rand or this)
* @returns {string}
*
* @memberOf Rand
*/
static _randHexColor(rng) {
return "#" + rng.randHex().toString(16);
}
/**
* Get a random hex color string represented in "#HEXSTR" format
*
* @static
* @returns {string}
*
* @memberOf Rand
*/
static randHexColor() {
return Rand._randHexColor(Rand);
}
/**
* Get a random hex color string represented in "#HEXSTR" format
*
* @static
* @returns {string}
*
* @memberOf Rand
*/
randHexColor() {
return Rand._randHexColor(this);
}
//---- Random Geometry ----
/**
* Get a random vector in a bounding box
*
* @private
* @static
* @param {any} rng The local or global rng to use (Rand or this)
* @param {Rectangle} bbox The bounding box of the random vector
* @returns {Vector} A random vector
*
* @memberOf Rand
*/
static _vector(rng, bbox) {
return new Vector(Rand.randRange(bbox.x, bbox.x + bbox.width),
Rand.randRange(bbox.y, bbox.y + bbox.height));
}
/**
* Get a random vector in a bounding box
*
* @static
* @param {Rectangle} bbox The bounding box of the random vector
* @returns {Vector} A random vector
*
* @memberOf Rand
*/
static vector(bbox) {
return Rand._vector(Rand, bbox);
}
/**
* Get a random vector in a bounding box
*
* @param {Rectangle} bbox The bounding box of the random vector
* @returns {Vector} A random vector
*
* @memberOf Rand
*/
vector(bbox) {
return Rand._vector(this, bbox);
}
}
export default Rand;</code></pre>
</article>
</section>
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Fri Oct 27 2017 19:20:05 GMT-0400 (Eastern Daylight Time)
</footer>
</div>
</div>
<script>prettyPrint();</script>
<script src="scripts/linenumber.js"></script>
<script src="scripts/main.js"></script>
</body>
</html>