UNPKG

atum

Version:

A Procedural Graph Based Javascript Library

866 lines (626 loc) 28.6 kB
<!DOCTYPE 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>