Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Работа Rnd
     
    
Добавлено: 12.06.12 19:22
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 merr
      
       
  
Товарисчи! Еще один детский вопрос.
 
    
Подскажите пожалуйста, такую штуку: если в программе используется несколько Rnd-генераторов, а "Randomize" (без значения - ссылка на системный таймер)ставить только в одной из процедур, то оно не будет "видно" в другой? А если в одной процедуре несколько Rnd, то на все ли оно будет действовать?
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 10
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 AgentFire
![]()
![]()
![]()
ICQ: 192496851 
Вопросов: 75
Ответов: 3178
      
 Профиль |  | #1
       
Добавлено:  12.06.12 19:38
       
    
       
  
будет
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 Winand
![]()
![]()
![]()
Вопросов: 87
Ответов: 2795
      
 Web-сайт:  
 Профиль |  | #2
      
Добавлено:  12.06.12 22:53
       
    
       
  
вызывай Randomize однократно при запуске программы.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 merr
![]()
![]()
![]()
Вопросов: 11
Ответов: 31
      
 Профиль |  | #3
       
Добавлено:  13.06.12 01:18
       
    
       
  
Ок, спасибо.
 
    
Видимо, генератор в VB6 уж не очень "случайный"... Понимаю, он псевдо, но уж слишком характерные повторяющиеся узоры из пикселей рисует - вроде такого http://www.random.org/analysis/ 
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #4
       
Добавлено:  13.06.12 01:52
       
    
       
  
да вполне нормальный там генератор.
 
    
Учти, что Randomize инициализирует генератор значением таймера. И если это делать часто, возникнет ситуация, когда между Randomize'ами значение таймера не успело поменяться, вот тогда-то и будут генерироваться повторяющиеся последовательности.
Делаешь Randomize при запуске программы, этого должно быть достаточно.
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 Cramper
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Вопросов: 15
Ответов: 93
      
 Профиль |  | #5
       
Добавлено:  13.06.12 15:09
       
    
       
  
Интрересно бы знать какова функция распеределения этой функции? Скорее всего норамальное.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 merr
![]()
![]()
![]()
Вопросов: 11
Ответов: 31
      
 Профиль |  | #6
       
Добавлено:  13.06.12 23:22
       
    
       
  
Ок, но в том то и прикол что в разное время (я специально до секунд не измерял) он выдавал картинки, где есть "характерные" элементы. Да, они никогда в точности не повторяются, но в целом похожи...Ладно, может я занудствую, а генератор отличный  
    
 
По идее, у Rnd-генератора должно быть равномерное распределение, т.е. не как у нормального - повышение частоты значений близких к среднему ("горка" нормального распределения), а просто ровная линия.
Кстати, как часто меняется значение Rnd? Он учитывает время до миллисекунд - т.е. 1000 р/сек, то бишь, 1 кГц? 
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 Cramper
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Вопросов: 15
Ответов: 93
      
 Профиль |  | #7
       
Добавлено:  15.06.12 08:13
       
    
       
  
Да конечно, должно быть равномерное! Для рисования картинок, наверное сгодится. Но вот если речь пойдет оболее тонких вычислительных экспериментах, то скорее всего лучше написать свой генератор, так будет надежнее. 
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа:
 Mikle
![]()
Вопросов: 5
Ответов: 134
      
 Профиль |  | #8
       
Добавлено:  16.06.12 10:19
       
    
       
  
Занимаюсь генерацией текстур. Алгоритм близок к шуму Перлина. Обратил внимание, что на текстурах просматривается не запланированный узор. Долго искал причину в алгоритме, а нашел в бейсиковской RND().
 
    
Это меня подвигло к разработке более "случайной" ф-ции. Вот результат:
Rand - вместо RND.
RandInit - вместо RANDOMIZE.
Распределении гораздо ровнее, чем у RND и в Native Code работает в 3-4 раза быстрее.
Простой тест:
Задайте ширину 256. Кликайте по форме и смотрите результат.
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа:
 merr
![]()
![]()
![]()
Вопросов: 11
Ответов: 31
      
 Профиль |  | #9
       
Добавлено:  16.06.12 13:31
       
    
       
  
Mikle, Спасибо!
 
    
Просветился про шум Перлина. Интересная штука. У меня другая система - клеточный автомат, для которого нужно инициализировать случайное начальное состояние. Буду экспериментировать...
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа:
 merr
![]()
![]()
![]()
Вопросов: 11
Ответов: 31
      
 Профиль |  | #10
       
Добавлено:  02.07.12 00:00
       
    
       
  
Допер в чем была загогулина! Rnd в цикле. Шляпа