Browse Source

Merge pull request #16655 from WestLangley/dev_math_prng

THREE.MathUtils: added seededRandom() method
Mr.doob 5 years ago
parent
commit
0aa4a846de

+ 3 - 0
docs/api/en/math/MathUtils.html

@@ -83,6 +83,9 @@
 		<h3>[method:Integer randInt]( [param:Integer low], [param:Integer high] )</h3>
 		<h3>[method:Integer randInt]( [param:Integer low], [param:Integer high] )</h3>
 		<p>Random integer in the interval [page:Float low] to [page:Float high].</p>
 		<p>Random integer in the interval [page:Float low] to [page:Float high].</p>
 
 
+		<h3>[method:Float seededRandom]( [param:Integer seed] )</h3>
+		<p>Deterministic pseudo-random float in the interval [ 0, 1 ]. The integer [page:Integer seed] is optional.</p>
+
 		<h3>[method:Float smoothstep]( [param:Float x], [param:Float min], [param:Float max] )</h3>
 		<h3>[method:Float smoothstep]( [param:Float x], [param:Float min], [param:Float max] )</h3>
 		<p>
 		<p>
 		[page:Float x] - The value to evaluate based on its position between min and max. <br />
 		[page:Float x] - The value to evaluate based on its position between min and max. <br />

+ 3 - 0
docs/api/zh/math/MathUtils.html

@@ -80,6 +80,9 @@
 		<h3>[method:Integer randInt]( [param:Integer low], [param:Integer high] )</h3>
 		<h3>[method:Integer randInt]( [param:Integer low], [param:Integer high] )</h3>
 		<p>在区间[page:Float low] 到 [page:Float high]随机一个整数。</p>
 		<p>在区间[page:Float low] 到 [page:Float high]随机一个整数。</p>
 
 
+		<h3>[method:Float seededRandom]( [param:Integer seed] )</h3>
+		<p>Deterministic pseudo-random float in the interval [ 0, 1 ]. The integer [page:Integer seed] is optional.</p>
+
 		<h3>[method:Float smoothstep]( [param:Float x], [param:Float min], [param:Float max] )</h3>
 		<h3>[method:Float smoothstep]( [param:Float x], [param:Float min], [param:Float max] )</h3>
 		<p>
 		<p>
 		[page:Float x] - 根据其在最小值和最大值之间的位置来计算的值。 <br />
 		[page:Float x] - 根据其在最小值和最大值之间的位置来计算的值。 <br />

+ 5 - 0
src/math/MathUtils.d.ts

@@ -63,6 +63,11 @@ export namespace MathUtils {
 	 */
 	 */
 	export function randFloatSpread( range: number ): number;
 	export function randFloatSpread( range: number ): number;
 
 
+	/**
+	 * Deterministic pseudo-random float in the interval [ 0, 1 ].
+	 */
+	export function seededRandom( seed?: number ): number;
+
 	export function degToRad( degrees: number ): number;
 	export function degToRad( degrees: number ): number;
 
 
 	export function radToDeg( radians: number ): number;
 	export function radToDeg( radians: number ): number;

+ 20 - 0
src/math/MathUtils.js

@@ -115,6 +115,26 @@ const MathUtils = {
 
 
 	},
 	},
 
 
+	// Deterministic pseudo-random float in the interval [ 0, 1 ]
+
+	seededRandom: function () {
+
+		var seed = 1234567;
+
+		return function seededRandom( s ) {
+
+			if ( s !== undefined ) seed = s % 2147483647;
+
+			// Park-Miller algorithm
+
+			seed = seed * 16807 % 2147483647;
+
+			return ( seed - 1 ) / 2147483646;
+
+		};
+
+	}(),
+
 	degToRad: function ( degrees ) {
 	degToRad: function ( degrees ) {
 
 
 		return degrees * MathUtils.DEG2RAD;
 		return degrees * MathUtils.DEG2RAD;