So your question consists of 2 problems:
Create a seed from the 2 float
values that always maps the same input to the same seed.
Using a seed to generate a random float
.
For the first problem this can be solved by creating a hashcode, there are different ways to do it but I'll refer to this answer by John Skeet for more information on that. For you the hashing would look like this:
public int GetHashCode(float x, float y)
{
unchecked // Overflow is fine, just wrap
{
int hash = (int)2166136261;
// Suitable nullity checks etc, of course :)
hash = (hash * 16777619) ^ x.GetHashCode();
hash = (hash * 16777619) ^ y.GetHashCode();
return hash;
}
}
So now problem 1 is solved we can move on to problem 2, here we have a problem since you require a float which the Random
class doesn't support. If a double
is good enough for you (floats from your PerlinNoise
can be converted to double
's), you could then do this:
public double GenerateRandom(float x, float y)
{
return new Random(GetHashCode(x, y)).NextDouble();
}
If double
is not good enough and you require it to be a float
, I'll refer to this answer, all his solutions should work with a Random
instance created using the hash function above as seed.
Hope this helps and good luck with your project!