Break up the world into chunks or larger areas. They should have a uniform size, they should store their positions with a short, and each of them should contain some points.
Let's convert it to a seed to give to the random function. Every variable has a minimum value, for signed types this is negative. For example the minimum value of an integer is -32768. If you add this to the coordinates of the chunk, you'll always get a positive value.
You'll now have 2 coordinates, one on the x axis and one on the y axis, and both of them are positive.
You can concatenate this into an int by doing some bitwise operations:
x << 16 & y
This is your seed. This'll be unique for every chunk. Now you can set Random.seed
to this and get the same results every time.
When you generate your biomes in a chunk, you need to generate the points in the chunks next to the current one, and use the resulted points to calculate the biomes in the current chunk.
I'll leave it to you how you generate your points, but a possible solution would be to first generate how many points there are in that area, then generate the position of the points and the type of the point (what chunk it resembles).
The only problem with this is that it only allows you to have 65536 chunk in each direction. You can solve this by using ints and you concatenate them into a long, but I haven't found a way yet to use a long as a seed.