Randomization
From XNAWiki
Contents
Get Random number within a min/max range
/// <summary>
/// Returns a number between two values.
/// </summary>
/// <param name="min">Lower bound value</param>
/// <param name="max">Upper bound value</param>
/// <returns>Random number between bounds.</returns>
public static float RandomBetween(double min, double max)
{
Random random = new Random();
return (float)(min + (float)random.NextDouble() * (max - min));
}Get a Random number with a 50% chance of being either -1 or 1
This function requires the RandomBetween() function, shown at the top of this page
/// <summary>
/// 50/50 chance of returning either -1 or 1
/// </summary>
public static int Random5050
{
Random random = new Random();
get
{
if (RandomBetween(0, 2) >= 1)
return 1;
else
return -1;
}
}Chance in Percentage
public static bool Chance(int percentage)
{
Random random = new Random();
double chance = percentage + random.Next(1, 100);
if (chance >= 100)
{
return true;
}
return false;
}
Create a random point in 3D space
This function requires the RandomBetween() function, shown at the top of this page
public static Vector3 RandomPosition(Vector3 minBoxPos, Vector3 maxBoxPos)
{
Random random = new Random();
return new Vector3(
RandomBetween(minBoxPos.X, maxBoxPos.X),
RandomBetween(minBoxPos.Y, maxBoxPos.Y),
RandomBetween(minBoxPos.Z, maxBoxPos.Z));
}Create a random direction in any direction in 3D space
This function requires the RandomBetween() function, shown at the top of this page
public static Vector3 RandomDirection()
{
Random random = new Random();
Vector3 direction = new Vector3(
RandomBetween(-1.0f, 1.0f),
RandomBetween(-1.0f, 1.0f),
RandomBetween(-1.0f, 1.0f));
direction.Normalize();
return direction;
}http://mathworld.wolfram.com/SpherePointPicking.html
Get a Random point on a triangle whose points lie in 3D space
/// <summary>
/// Helper function chooses a random location on a triangle.
/// </summary>
public static Vector3 PickRandomPoint(
Vector3 position1,
Vector3 position2,
Vector3 position3)
{
Random random = new Random();
float a = (float)random.NextDouble();
float b = (float)random.NextDouble();
if (a + b > 1)
{
a = 1 - a;
b = 1 - b;
}
return Vector3.Barycentric(position1, position2, position3, a, b);
}