Se bem entendi, apenas pontos em um pequeno volume de espaço n-dimensional atendem às suas restrições.
Sua primeira restrição o restringe ao interior de uma hiperesfera, o que me lembra as perguntas frequentes comp.graphics.algorithms "Pontos aleatórios uniformes na esfera" e Como gerar pontos uniformemente distribuídos na bola unitária em 3-d?
A segunda restrição corta um pouco da hiperesfera, e as outras restrições diminuem ainda mais o volume que atende às suas restrições.
Eu acho que a coisa mais simples a fazer é uma das abordagens sugeridas pelo FAQ:
- escolha uma caixa delimitadora alinhada ao Eixo arbitrária que, com certeza, contém todo o volume. Nesse caso, -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c contém todo o volume restrito, uma vez que contém a hiperesfera descrita pela primeira restrição, e as outras restrições permanecem inalteradas longe nesse volume.
- O algoritmo escolhe pontos uniformemente em toda a caixa delimitadora. Nesse caso, o algoritmo define independentemente cada coordenada de um vetor candidato para algum número aleatório uniformemente distribuído independente de -c a + c. (Suponho que você queira pontos distribuídos com densidade igual ao longo deste volume. Suponho que você possa fazer com que o algoritmo selecione algumas ou todas as coordenadas com uma distribuição de Poisson ou outra distribuição não uniforme, se você tiver algum motivo para isso).
- Depois de ter um vetor candidato, verifique cada restrição. Se falhar em algum deles, volte e escolha outro ponto.
- Depois de ter um vetor candidato, armazene-o em algum lugar para uso posterior.
- Se você não tiver vetores armazenados suficientes, volte e tente gerar outro.
Com o gerador de números aleatórios de qualidade suficientemente alta, isso fornece um conjunto de coordenadas armazenadas que atendem aos seus critérios com densidade uniforme (esperada).
Infelizmente, se você possui uma dimensionalidade relativamente alta n (isto é, se você constrói cada vetor a partir de uma lista relativamente longa de coordenadas), a esfera inscrita (muito menos o seu volume reduzido) possui uma parte surpreendentemente pequena do volume total de a caixa delimitadora total, portanto, pode ser necessário executar muitas iterações, a maioria delas gerando pontos rejeitados fora da área restrita, antes de encontrar um ponto dentro da área restrita. Como os computadores hoje em dia são bem rápidos, isso será rápido o suficiente?