Here, we should describe a couple of functions used in control calculations.
In the preceding code, we used the ClampVec2()
routine, which calculates the length of a vector V
, compares this length to MaxValue
, and returns either the same vector V
or its clamped coaxial version of the MaxValue
length:
inline vec2 ClampVec2(const vec2& V, float MaxValue) { float L = V.Length(); return (L > MaxValue) ? V.GetNormalized() * MaxValue : V; }
Another bunch of methods include random number generation routines. The RandomFloat()
method uses the C++11 standard library to generate uniformly distributed floating-point values in the 0…1 interval:
std::random_device rd; std::mt19937 gen( rd() ); std::uniform_real_distribution<> dis( 0.0, 1.0 ); float RandomFloat() { return static_cast<float>( dis( gen ) ); }
The RandomVec2Range()
method uses the RandomFloat()
function twice to return a vector with random components within a specified interval:
vec2 RandomVec2Range...