Uma possibilidade é usar um algoritmo chamado ruído simplex , inventado por Ken Perlin (conhecido por Perlin Noise). Uma característica interessante do ruído simplex (como o ruído Perlin) é que ele pode ser lado a lado - ou seja, apenas uma pequena região fora da área potencial precisa ser calculada e isso pode ser repetido em toda a área sem costuras visíveis.
Para que a função de ruído seja repetível, ou seja, sempre produza o mesmo valor para um determinado ponto de entrada, os gradientes precisam ser pseudo-aleatórios, não verdadeiramente aleatórios. Eles precisam ter variação suficiente para ocultar o fato de que a função não é verdadeiramente aleatória, mas muita variação causará comportamento imprevisível para a função de ruído
O ruído simplex pode ser gerado mais rapidamente que o ruído Perlin e não requer um gerador de números aleatórios. Não é arbitrário implementar apenas conhecendo a teoria, mas há algum código fonte para ajudá-lo ( referenciado na Wikipedia ).
Outras opções para gerar ruído pseudo-aleatório são fractais e wavelets .
Na sua situação, você usaria uma dessas técnicas para gerar uma série de dados em uma dimensão e, em seguida, aplicaria um limite para determinar se uma árvore deve ser colocada nessa posição.