Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com variáveis aleatórias dentro de um loop.


Guilherme31415

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0
17 horas atrás, Guilherme31415 disse:

Olá, meu nome é Guilherme e estou com um dúvida. Em uma certa parte do meu programa há um loop e eu preciso gerar uma variável aleatória dentro desse loop. Só que o valor dessa variável fica mudando e não queria que acontecesse isso. Como faço para "fixar" essa variável logo após que ela foi gerada?

poste o seu algoritmo e diga o que esta errado nele para que eu possa ver como ajudar

Link para o comentário
Compartilhar em outros sites

  • 0

Estou fazendo um tipo de "terreno 2D" feito só por quadrados. Estou usando OpenGL para isso. Essa é a parte do meu código que estou com dúvida:

void terreno(){
    
    int i, j, max_j;
    
    glPushMatrix();
    glTranslatef(x, y, 0);
    
    for(i = -grade_parametro; i < grade_parametro; i++){
        
        max_j = -10 + rand() % 10;
        
        for(j = -grade_parametro; j < max_j; j++){
            
            glPushMatrix();
            glScalef(scale, scale, 0);
            glTranslatef(i, j, 0);
            
                quadrado_terreno();
            
            glPopMatrix();
            
        }
        
    }
    
    glPopMatrix();
    
}

Se eu troco o

max_j = -10 + rand() % 10;

por

max_j = 5;

por exemplo, chega até funcionar...(obtenho um terreno plano).

Enfim, eu quero "simular um ruído" usando rand() só que quando entra o loop do OpenGL  o valor fica mudando. Queria o mesmo valor sempre... 

Será q tem um modo de resolver essa gambiarra que eu fiz?

Link para o comentário
Compartilhar em outros sites

  • 0

Nunca utilizei OpenGL, mas se entendi corretamente seu desejo e analisando seu código, sugiro uma solução.

Em 26/07/2020 em 19:57, Guilherme31415 disse:

for(i = -grade_parametro; i < grade_parametro; i++){
        
        max_j = -10 + rand() % 10;
        
        for(j = -grade_parametro; j < max_j; j++){
            
            glPushMatrix();
            glScalef(scale, scale, 0);
            glTranslatef(i, j, 0);
            
                quadrado_terreno();
            
            glPopMatrix();
            
        }
        
    }

 

O problema está em a variável max_j ser redefinida a cada nova iteração. Para resolver, você pode simplesmente defini-la fora do laço, antes de iniciá-lo. Além disso, para fazer com que o número aleatório gerado não seja sempre o mesmo, você deve fornecer uma semente ao gerador. Para mais detalhes, aconselho a leitura desta página.

srand(time(NULL));	//Semente (a função time() pertence a biblioteca time.h)
max_j = -10 + rand() % 10; 	//Definindo a variável fora do loop
for(i = -grade_parametro; i < grade_parametro; i++){
        for(j = -grade_parametro; j < max_j; j++){
            
            glPushMatrix();
            glScalef(scale, scale, 0);
            glTranslatef(i, j, 0);
            
                quadrado_terreno();
            
            glPopMatrix();
            
        }
        
    }


 

Link para o comentário
Compartilhar em outros sites

  • 0

Então deu esses erros (quando tento compilar o código) 

C:\Users\...\Voxel (3)\collect2.exe    [Error] ld returned 1 exit status

C:\...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe    cannot open output file Voxel + Noise.exe: Permission denied

25        C:\...\Voxel (3)\Makefile.win    recipe for target 'Noise.exe"' failed

Não consigo definir se não for dentro do loop...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...