Russian Qt Forum
Ноябрь 23, 2024, 14:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 5 6 [7]   Вниз
  Печать  
Автор Тема: псевдослучайные числа типа float  (Прочитано 39769 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #90 : Июль 06, 2011, 18:33 »

Ничего подобного, это просто)).
sigma не зависит от числа точек, она зависит от их плотности: т.е. числа точек на единицу площади (которое уж надеюсь известно или задано). И мерится она (sigma) в еденицах периода решётки, который из плотности точек можно получить (во всяком случае оценить).  
Дело не в "просто/сложно", просто вся затея "поставим равномерно а там как надо зашумим" создает впечатление неуклюжести/незавершенки (во всяком случае у меня когда в свое время делал эти шаги). Ну напр какое sigma Вы считаете лучшим? Хммм.. да так сразу и не скажешь Улыбающийся надо "подбирать". Изначально точки поставлены по диагоналям - конечно это лучше. Но "мотив" все равно есть, глаз легко ловит диагональные цепочки. Изначальная расстановка тоже не очень удобна. Если тысячи точек - проблем нет. Но вот заказано напр 70 на квадрате - и 64 мало, 81 много. И опять надо как-то суетиться. Unpolished, неэлегантно.

Ну а со сферой упорно отмалчиваемся  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #91 : Июль 25, 2011, 10:44 »

Ну приемчик-то простой. Вот базовый велосипедик
Код
C++ (Qt)
inline float Hammer( int n )
{
float sum = 0.0f;
float t = 0.5f;
while (n) {
 sum += (n & 1) * t;
 n = n >> 1;
 t /= 2;
}
return sum;
}
 
Конечно все это можно записать короче. По существу это "fractal noise" наоборот - гармония разрушается специально/умышленно - но получается новая гармония (крайности сходятся).  Ну а генерировать легко и приятно

Код
C++ (Qt)
void PlaneHammer( int n, int numSamples, float & x, float & y )
{
 x = (n + 0.5f) / numSmples; // тупенько идем с равномерным шагом по x
 y = Hammer(n);  // а по y (второй координате) велостпедиком
}
 
Легко убедиться что это прекрасно работает для сферы, полусфеоы  (любых телесных углов) и вообще для любой параметрической поверхности (u, v)
Записан
Страниц: 1 ... 5 6 [7]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.336 секунд. Запросов: 22.