Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Edynchik от Июнь 30, 2011, 08:02



Название: псевдослучайные числа типа float
Отправлено: Edynchik от Июнь 30, 2011, 08:02
Как получить псевдщслучайное число типа float?  с int все понятно - это qrand(), а вот float и double...


Название: Re: псевдослучайные числа типа float
Отправлено: Blackwanderer от Июнь 30, 2011, 08:50
Как получить псевдщслучайное число типа float?  с int все понятно - это qrand(), а вот float и double...
Код:
float(qrand())/max
Здесь max - максимальное число, выдаваемое qrand. В итоге получаем вещественное псевдослучайное число из диапазона [0;1].


Название: Re: псевдослучайные числа типа float
Отправлено: Edynchik от Июнь 30, 2011, 10:21
Здесь max - максимальное число, выдаваемое qrand. В итоге получаем вещественное псевдослучайное число из диапазона [0;1].
а как я могу узнать максимум qrand? или как получить псевдослучайное с заданным максимумом,или в определенном интервале?


Название: Re: псевдослучайные числа типа float
Отправлено: LisandreL от Июнь 30, 2011, 10:37
Returns a value between 0 and RAND_MAX (defined in <cstdlib> and <stdlib.h>), the next number in the current sequence of pseudo-random integers.


Название: Re: псевдослучайные числа типа float
Отправлено: Edynchik от Июнь 30, 2011, 10:44
Returns a value between 0 and RAND_MAX (defined in <cstdlib> and <stdlib.h>), the next number in the current sequence of pseudo-random integers.
то есть надо менять эту константу,а если необходимо пять раз вывесть до разного максимума?


Название: Re: псевдослучайные числа типа float
Отправлено: LisandreL от Июнь 30, 2011, 11:07
менять константу
You made my day. ;D


Название: Re: псевдослучайные числа типа float
Отправлено: ddrtn от Июнь 30, 2011, 11:16
Числа в диапазоне [a;b]:

Код:
(b-a)*static_cast<float>(qrand())/RAND_MAX + a



Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июнь 30, 2011, 16:18
http://www.johndcook.com/cpp_TR1_random.html


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июнь 30, 2011, 16:40
http://www.johndcook.com/cpp_TR1_random.html
Нужно распределить точки на поверхности сферы "квази-случайно" - ну то есть случайно, но более-менее равномерно, так чтобы не было ни заметных "сгущений" ни заметных пустых мест. В то же время распределение должно быть именно случайным, равномерное не годится т.к. позволяет "ездить между рядами".

Ну быстро выясняется что просто random "не пляшет" - он "слишком случен", выгладить распределенные точки затем практически нереально. Пробовал так: разбросать в N раз больше точек и потом отфильтровать. Это так-сяк работает но требует  приличного N и весьма затратно

А что скажет научный работник? :)  Если сфера - слишком сложно, то просто на плоском прямоугольнике размеры которого (width, height) известны


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июнь 30, 2011, 16:54
В бусте есть Boost.Random: http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html
Где можно поиграть с разными движками и распределителями.


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июнь 30, 2011, 17:05
В бусте есть Boost.Random: http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html
Где можно поиграть с разными движками и распределителями.
Буст - сильный вещь, и, как я не брыкался, мне его поставить пришлось  :)
Но в данном случае дело не в движках/распределителях. Обратите внимание что речь идет о "точках", а не о "числах" - это многое меняет.


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июнь 30, 2011, 17:14
Первое что бы попробовал для плоского прямоугольника, это два отдельных генератора для каждой оси ([0..width-1], [0..height-1]).


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июнь 30, 2011, 17:23
http://www.johndcook.com/cpp_TR1_random.html
Нужно распределить точки на поверхности сферы "квази-случайно" - ну то есть случайно, но более-менее равномерно, так чтобы не было ни заметных "сгущений" ни заметных пустых мест. В то же время распределение должно быть именно случайным, равномерное не годится т.к. позволяет "ездить между рядами".

Ну быстро выясняется что просто random "не пляшет" - он "слишком случен", выгладить распределенные точки затем практически нереально. Пробовал так: разбросать в N раз больше точек и потом отфильтровать. Это так-сяк работает но требует  приличного N и весьма затратно

А что скажет научный работник? :)  Если сфера - слишком сложно, то просто на плоском прямоугольнике размеры которого (width, height) известны

Вообще обычный rand() - это жесть. Он во-первых медленный, а во-вторых не обеспечивает ту статистическую случайность, какую хотелось бы)
Я, например использую класс MTRand, где реализован алгоритм Mersenne Twister. Считается одним из лучших по всем пунктам генератором случайных чисел.
Приаттачен ниже.

Что касается точек на сфере. Пусть радиус задан R.
Тогда любая точка на поверхности характеризуется двумя углами theta = [0, pi] и phi = [0, 2pi]
Пусть, для простоты, сфера нах. в начале координат, тогда
z = R*cos(theta);
x = R*sin(theta)*cos(phi);
y = R*sin(theta)*sin(phi).

А сам код примерно такой (с использованием MTRand):
Код
C++ (Qt)
#include "MersenneTwister.h"
 
struct Point3D
{
   Point3D(double x_ = 0.0, double y = 0.0, double z = 0.0) : x(x_), y(y_), z(z_) {}
   double x;
   double y;
   double z;
};
 
int main()
{
   vector<Point3D> vectorOfPoints(1000);
   MTRand mtRand;
   const double R = 1.0;
   for (size_t i = 0; i < vectorOfPoint.size(); ++i) {
       double theta = mtRand.rand(M_PI);
       double phi = mtRand.rand(M_PI+M_PI);
       double sin_theta = sin(theta);
       double z = R*cos(theta);
       double x = R*sin_theta * cos(phi);
       double y = R*sin_theta * sin(phi);
       vectorOfPoints[i] = Point3D(x, y, z);
   }
 
   return 0;
}
 

Примерно так  :)  
Слабым местом здесь является то, что приходиться вычислять синусы с косинусами, что не быстро..


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июнь 30, 2011, 17:32
Я, например использую класс MTRand, где реализован алгоритм Mersenne Twister. Считается одним из лучших по всем пунктам генератором случайных чисел.
Вот он в бусте - http://www.boost.org/doc/libs/1_46_1/doc/html/boost/mt19937.html


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июнь 30, 2011, 17:40
Первое что бы попробовал для плоского прямоугольника, это два отдельных генератора для каждой оси ([0..width-1], [0..height-1]).
Так лезут все проблемы обычного random (сгустки, пустоты). Потом сколько ни гладь - все равно болт

Я, например использую класс MTRand, где реализован алгоритм Mersenne Twister. Считается одним из лучших по всем пунктам генератором случайных чисел.
Приаттачен ниже.
Ну переводить из полярных координат в декартовы Вы конечно умеете :) Но пожалуйста предъявите визуализированные (любым путем) точки на сфере чтобы пипл заценил насколько они "равномерно-случайны". А исходники в данном случае не очень нужны (у нас, джентльменов, верят на слово). Разумеется, я отвечу своей картинкой.

К слову
Слабым местом здесь является то, что приходиться вычислять синусы с косинусами, что не быстро..
А не делается ли это сейчас (или уже давно) на уровне машинных команд? Возможно, то что мы учили - уже (давно) устарело


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июнь 30, 2011, 18:39
У меня сейчас под рукой нет ничего такого 3dшного, на чём можно было бы быстро отобразить результаты для сферы.
Сейчас попробую покурить на тему QGLWidget.. Там вроде это не сложно сделать (мало опыта в 3d).
Вобщем, советую Вам запастись терпением))


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июнь 30, 2011, 18:59
Набросал небольшой 2D-тест.
Буфер 500x500 точек, заполняется 20 000 точек.
Результаты, что бы понять насколько это плохо или хорошо.  :)


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июнь 30, 2011, 19:02
Набросал небольшой 2D-тест.
Буфер 500x500 точек, заполняется 20 000 точек.
Результаты:

А что за генератор?
А первый рисунок, на котором ничего нет - это что?


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июнь 30, 2011, 19:03
А что за генератор?
Mersenne Twister

А первый рисунок, на котором ничего нет - это что?
Исходная картинка - до генерации.  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июнь 30, 2011, 20:42
У меня сейчас под рукой нет ничего такого 3dшного, на чём можно было бы быстро отобразить результаты для сферы.
Сейчас попробую покурить на тему QGLWidget.. Там вроде это не сложно сделать (мало опыта в 3d).
Вобщем, советую Вам запастись терпением))
m_ax, что за дешевый понт? Да шлепните точки в изометрии, делов 10 минут, я ж не прошу Вас делать реальную камеру.

Набросал небольшой 2D-тест.
Буфер 500x500 точек, заполняется 20 000 точек.
Результаты, что бы понять насколько это плохо или хорошо.  :)
Ну у Вас с инструментарием все Ок (не сомневался), но точки распределены как бык поссал - а надо аккуратно (attachment)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июнь 30, 2011, 20:57
но точки распределены как бык поссал - а надо аккуратно (attachment)
Аккуратные случайные числа?  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июнь 30, 2011, 21:07
Набросал небольшой 2D-тест.
статистические исследования проводятся не так.
 берёте выборку, строите гистограмму распределения, потом считаете разные мат-параметры и т.п.

а это - на глаз. показывает имхо, только насколько генерируемые одно и другое число разнятся...

имхо, порядок у вас тоже важен. но как это считать - не помню.
а то выяснится что у ваш генератор  каждое второе число генерирует просто увеличивая на единицу значение - и так по циклу? картинку вы тоже похожую получите...

В общем случае - берите какой-алгоритм генерации случсйных чисел, подбирайте параметры, для каждого параметра проводите исследование и смотрите что бы у вас получилость равномерно-распределенная псевдо-случайная величина. а если у вас равномерно-распределенная величина - преобразовать её к величине с заданным графиком распреденеия - проблем не составит. именно пожтому ч не играю в азартные игры с компьютером - я знаю что статистически он всегда выигрывает))))


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июнь 30, 2011, 21:10
короче, господа. наш чайник-топик-стартер свалил , предлагаю и нам забить на тему))))


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июнь 30, 2011, 21:11
Не-не. Мне этого не надо, это пусть Igors исследует, если нужно ;)
Мне было интересно посмотреть конкретный генератор и распределитель, что бы узнать будут ли образовываться скопления/пустоты.
Попробовал с различными количествами точек. На интересующий меня вопрос ответ получил.  :)


Название: Re: псевдослучайные числа типа float
Отправлено: ufna от Июнь 30, 2011, 23:25
в картинках от Igors очень сильно проявляется определенный паттерн для точек


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 10:20
в картинках от Igors очень сильно проявляется определенный паттерн для точек
Есть такое дело, но картинки получены не размножением паттернов

Мне было интересно посмотреть конкретный генератор и распределитель, что бы узнать будут ли образовываться скопления/пустоты.
Попробовал с различными количествами точек. На интересующий меня вопрос ответ получил.  :)
Ну так озвучьте ответ, или, еще лучше, предъявите картинку. Из того что Вы пока показали неясно как же сделать без скоплений и пустот.

статистические исследования проводятся не так.
Учитель, я не спрашивал как проводятся статистические исследования. Задача покрыть заданную поверхность заданным числом "самплов" (точек). А как это сделать - с генератором, дустом или без - ограничений нет, нужен результат. 

 


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 01, 2011, 10:46
Ну так озвучьте ответ, или, еще лучше, предъявите картинку. Из того что Вы пока показали неясно как же сделать без скоплений и пустот.
Странно как-то.  ::)
Я привел картинку и написал параметры ее получения. По моему субъективному мнению и при заданных параметрах явных скоплений/пустот лично(!) я не увидел.  :)
Какую картинку еще нужно привести?  Я приведу.  ;)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 11:17
Странно как-то.  ::)
Я привел картинку и написал параметры ее получения. По моему субъективному мнению и при заданных параметрах явных скоплений/пустот лично(!) я не увидел.  :)
А я увидел :) Попробуйте получить имедж используя созданные точки. Используйте любой фильтр какой нравится, хотя бы так (псевдокод)
Код
C++ (Qt)
foreach pixel  {
float value = 0.0f;
foreach point {
 float d = distance(pixel, point);
 if (d < averageRadius) {
   value += 1.0f - d / averageRadius;
   if (value >= 1.0f) break;
 }
}
pixel.SetColor(value, 0, 0);
}
 
Ну с Вашей техникой это семечки  :)
Однако Вы обнаружите что картинка получается "рябая", и радиус осреднения должен быть очень велик чтобы получить (приемлемую) равномерную закраску


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 01, 2011, 12:09
Попробуйте получить имедж используя созданные точки. Используйте любой фильтр какой нравится, хотя бы так (псевдокод)
А для чего мне это пробовать?
Я проверил конкретный движок, с конкретным распределителем, с конкретными параметрами и сделал для себя определенные выводы по работе этой связки.
Если эта связка не подходит для каких то твоих задач... ну что-ж прискорбно.  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 12:40
А для чего мне это пробовать?
Я проверил конкретный движок, с конкретным распределителем, с конкретными параметрами и сделал для себя определенные выводы по работе этой связки.
Просто точки расставлены плохо, и простой тест на выглаживание это покажет. Ну а выводы там можно делать любые - но они ничего не меняют  :)

Если эта связка не подходит для каких то твоих задач... ну что-ж прискорбно.  :)
Неужели Вы серьезно думаете что я ищу решение на форуме? :) Мне было бы интересно поговорить с человеком который тоже этим занимался, или, по крайней мере, имеет склонность к такой работе. А задачу эту я решал уже много лет назад  :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 01, 2011, 12:47
Просто точки расставлены плохо, и простой тест на выглаживание это покажет. Ну а выводы там можно делать любые - но они ничего не меняют  :)
;D
Плохо для кого? Для твоей конкретной задачи? Возможно. А для кого-то эти точки расставлены идеально, и никакого "выглаживания" ему не надо.  ;)

Мне было бы интересно поговорить с человеком который тоже этим занимался, или, по крайней мере, имеет склонность к такой работе. А задачу эту я решал уже много лет назад  :)

Решил вот так?  ;)
Цитата: Igors
...  Это так-сяк работает но требует  приличного N и весьма затратно

А для того, чтобы заинтересовать человека необходимо понятно описать проблему.  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 14:18
Решил вот так?  ;)
Нет, лучше :)  Хотя, возможно, есть и еще лучше.

А для того, чтобы заинтересовать человека необходимо понятно описать проблему.  :)
Что ж такого "непонятного" в моем описании (пост #8)? Более того, в картинках (пост #19)? Я так подозреваю что только одно: такого класса нет в Ассистент и/или в бусте. (Деточкин замахнулся на самое святое что есть у нас... :)) 


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 01, 2011, 14:29
 ;D
Позволю себе процитировать этот понятный пост еще раз:
Цитата: Igors
равномерное не годится т.к. позволяет "ездить между рядами".
Чего делать между рядами?

Цитата: Igors
Ну быстро выясняется что просто random "не пляшет" - он "слишком случен", выгладить распределенные точки затем практически нереально.
Он слишком какой?

Выгладить точки - это как?

Понятное описание проблемы это твой конек, здесь каждый это скажет.  ;D
Нельзя решать задачу, условия которой придумываются на ходу.  ;)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 01, 2011, 14:31
Нет, лучше :)
8)

Я так подозреваю что только одно: такого класса нет в Ассистент и/или в бусте. (Деточкин замахнулся на самое святое что есть у нас... :)) 
Как сильно ты закомплексован из-за своей безграмотности. Как часто ты выставляешь это на показ. Грустно.


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 18:14
Понятное описание проблемы это твой конек, здесь каждый это скажет.  ;D
Нельзя решать задачу, условия которой придумываются на ходу.  ;)
Лучше все-таки не расписываться "за каждого", а высказывать свое личное мнение. Спрашиваете "слишком какой" - хотя Вы "его" видели на собственном же примере. Спрашиваете что такое "выглаживание" - хотя я Вам сегодня предложил его проверить, да и вообще термин для инженера интуитивный. И.т.д. Я так вижу что Вы хотите решать задачу "которую Вы хотите", для которой у Вас есть знания и опыт. А если так не получается - Вы начинаете навязывать свое мнение (а для меня и эти точки хороши!), обвинять постановщика в неграмотности, переходить на личности  - словом, прибегать к дешевым приемам :)  Такой разговор ничего полезного не несет. Если Вам неинтересно то о чем я говорю - так я ж Вас в тему на аркане не тянул. Мне напр неинтересны дела СУБД, веба и др - но я не мешаю другим их обсуждать. 



Название: Re: псевдослучайные числа типа float
Отправлено: ufna от Июль 01, 2011, 18:40
Цитировать
для инженера интуитивный

вот я нифига не инженер (и потому термин хз что за термин), но в приведенном выше "решении" явно вижу ошибку, там квазислучайность нарушена.


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 18:45
вот я нифига не инженер (и потому термин хз что за термин), но в приведенном выше "решении" явно вижу ошибку, там квазислучайность нарушена.
Предлагайте свое решение, обсудим - для этого тема и создавалась  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 19:07
Формальный критерий оценки качества/результатов

Quality = 1 / (N * S);  // так вроде правильно :-)

где

N - число расставленных точек
S - максимальная площадь любой конвексной фигуры которую можно поместить на плоскость/поверхность так чтобы ни одна из расставленных точек не находилась внутри нее.

Ну это конечно и так понятно, просто для тех кто придирается к словам  :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 01, 2011, 19:08
Спрашиваете что такое "выглаживание" - хотя я Вам сегодня предложил его проверить, да и вообще термин для инженера интуитивный.
"Выглаживание" инженерный термин? Интуитивно понятный?  ::)
Я до сих пор не могу понять что должно делаться.  :)

Вы начинаете навязывать свое мнение (а для меня и эти точки хороши!), обвинять постановщика в неграмотности, переходить на личности  - словом, прибегать к дешевым приемам :)
Я навязываю свое мнение? Это когда?
Ты написал про негодный стандартный генератор, я предложил попробовать другой генератор из ненавистного тобой буста :) и сразу набросал небольшой тест для этого генератор. Все.  :)
Ты же назвал это все не приемлемым и абсолютно не подходящем для твоей задачи. Но! Я не решал твою задачу, я не хотел решать твою задачу.  :)

Насчет дешевых приемов, самый дешевый это:
Я так подозреваю что только одно: такого класса нет в Ассистент и/или в бусте. (Деточкин замахнулся на самое святое что есть у нас... :)) 

Пытаться доказать всем (себе?): "Осилить не могу значит это не нужно!". На LORe для таких людей даже придумали название.  ;)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 01, 2011, 19:47
Ты написал про негодный стандартный генератор,
Да не писал я такого  :)  Наоборот, я изо всех намекал что "числа" и "точки" - разные вещи.

из ненавистного тобой буста..
..
Пытаться доказать всем (себе?): "Осилить не могу значит это не нужно!".
Ну почему Вы так плохо думаете о людях? Буст - хорошая вещь, просто в большом проекте не так-то легко решиться на "еще одну зависимость". Я с удовольствием изучаю и буст и Qt (правда времени не так уж много перед скорым релизом). Почему "не могу осилить"? Я никогда не стремился стать "ходячей энциклопедией" (которая все-все знает да толку мало). Я просто против карикатурного/тупого применения этих вещей. Ведь большинство тем на этом форуме выглядят примерно так

- <какой-то вопрос>
- ответ всегда выглядит одинаково: "читай Assistent" (указание страницы)

Так что, мы все "девочки-отличницы" усердно зазубривающие материал? Посмотрите как быстро люди привыкают к "маминой Assistant-сисе", как быстро они теряют способность соображать и напрягаться (ну все ведь давно сделано за нас). А как нужно приложить мозги - так "задача плохая" (мозгов-то уже нет, все ушло в "запоминалку"). А ведь в реальной работе запоминалка не катит - выкладываться нужно постоянно. Не бывает такого что "ответ сразу готов" - это было бы слишком хорошо  :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 01, 2011, 20:00
А разве лучше, если бы вместо слов иди почитай документацию, вопрошающему сразу давали готовое решение?
Это предметный форум посвященный Qt, здесь по определению будут постоянно возникать вопросы из-за не дочитывания документации.
IMHO, уж лучше человек сам почитает и разберется со своей проблемой, заодно узнает кучу полезных для себя вещей.

Я согласен, что сейчас форумы (и куча всякой документации) в сети очень сильно расслабляют. Раньше (когда еще не было интернетов и fido было в зачаточном состоянии) приходилось очень много думать и разбираться с новыми вещами вообще без всякой информации, но... это было раньше и называлось приятным словом hacking, которое потом приспособили для описания непонятно чего. Эх ностальгия. :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 09:30
А разве лучше, если бы вместо слов иди почитай документацию, вопрошающему сразу давали готовое решение?
Это предметный форум посвященный Qt, здесь по определению будут постоянно возникать вопросы из-за не дочитывания документации.
IMHO, уж лучше человек сам почитает и разберется со своей проблемой, заодно узнает кучу полезных для себя вещей.
Конечно правильно - без изучения накопленного опыта не обойтись. Но ведь это принимает уродливые формы - человек начинает считать что на ЛЮБОЙ вопрос можно найти ответ в популярной доке, и все можно решить (быстренько) "разобравшись" (типа как давеча тут один диплом активно писал - ну или начинал писать). А че "любая кухарка может управлять государством". Потом правда выясняется что не любая - и лучше не кухарка.

"Техника" - дело хорошее, но за нее никто не платит, это просто как бы само собой. Реально платят за "решения"  - одно из которых я предложил обсудить (довольно простой пример). Конечно Вы никогда не увидите контракта с такой задачей - там будет звучать прикладная часть/конкретика. Но по сути к таким задачам/решениям все и сводится - а как там пристегнуть UI, контейнеры и.т.п. - дело десятое.


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 02, 2011, 10:00
Форумы так устроенны, что решать за тебя никто не будет, в лучшем случае "покажут куда идти" и выбран будет самый простой путь для объяснения идеи. Поэтому, вместо объяснения на пальцах - будет указываться название паттерна или набросок на стандартном (stl) или популярном (boost) инструменте. Это не значит, что нужно скопипастить это к себе в проект, это просто набросок. Все остальное должен додумывать (или не додумывать) вопрошающий. Его право воспользоваться каким-то инструментом или написать все самому, если предложенное решения не подходят, например, по скорости.

А обсуждать что то можно тогда, когда все понимают тему обсуждения, когда задача понятно сформулирована и указаны все! требования, ну и требования не меняются по желанию одной стороны в процессе обсуждения.

 


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 11:23
Форумы так устроенны, что решать за тебя никто не будет, в лучшем случае "покажут куда идти" и выбран будет самый простой путь для объяснения идеи. Поэтому, вместо объяснения на пальцах - будет указываться название паттерна или набросок на стандартном (stl) или популярном (boost) инструменте.
Я уже говорил что я не пытаюсь "что-то иметь" с форума - мне интересно услышать мнение других людей. По-Вашему выходит что форум - способ гуглить и готовое решение должно быть извлечено их "базы данных" в которую Вы превратили свою (хорошую) голову. Я с Вами не согласен  :)

А обсуждать что то можно тогда, когда все понимают тему обсуждения, когда задача понятно сформулирована и указаны все! требования, ну и требования не меняются по желанию одной стороны в процессе обсуждения.
А можно Вас спросить? (если мой вопрос неуместен - просто не отвечайте). Вы это.. с заказчиком реальным работали? Как там требования - никогда не меняются? Вы получаете чеканные/точные формулировки которым буквально следуете от начала до конца? Мне лично такой заказчик еще не попадался  :)

Да и придираетесь к постановке не по делу. Ну вот Вы напр. спросили - а что такое "ездить между рядами". Ладно, смотрим картинку (attachment для особо одаренных). Вроде бы - а зачем нам "случайно" - ну расставили точки регулярно, и все дела. В старой книжке написано примерно так
Цитировать
Опять командир недоволен. "Хитрости мало. Догадаются немцы, будут ездить между рядами"
Ладно, то "лирика". А технически такой "самплер" никуда не годится - несмотря на якобы идеальное число точек у него под носом можно слона вынести. Уж лучше накидать абы-как случайно. Чего такие self-explanatory вещи надо объяснять? Работник СУБД не спрашивает что такое SELECT


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 02, 2011, 12:10
По-Вашему выходит что форум - способ гуглить и готовое решение должно быть извлечено их "базы данных" в которую Вы превратили свою (хорошую) голову. Я с Вами не согласен  :)
Даже не знаю откуда появились такие выводы?  ::)
При обсуждении какой то задачи люди используют понятные всем термины и понятия. Это база используя которую можно строить решение.
Если человек спрашивает, как создавать объекты по имени класса, то я не буду объяснять ему на пальцах про паттерн "фабрика", а отправлю его почитать про него (даже если в лоб этот паттерн и не будет подходить для решения задачи). Также я не буду объяснять человеку на пальцах, что такое вектор и мап, а буду использовать стандартные коллекции. Главное что бы человек понял мою идею, а потом он может написать свой вектор и мап или использовать стандартный - это его дело.
К радости не существует одного решения для любой задачи.

А можно Вас спросить? (если мой вопрос неуместен - просто не отвечайте). Вы это.. с заказчиком реальным работали? Как там требования - никогда не меняются? Вы получаете чеканные/точные формулировки которым буквально следуете от начала до конца? Мне лично такой заказчик еще не попадался  :)
Перейдем к конкретике.  :)
Как правило заказчик это такой человек, который описывает проблему примерно так "Что бы я жмакнул там на кнопку и это сразу вот так изменилось". Разработчик (а лучше специально обученный человек, которому платят деньги) кушает валерьянку и садится с этим заказчиком разбираться с "вот так изменилось" в течении многих часов, что бы написать нормальное ТЗ. Это его работа, он за это деньги получает.
У меня не было желания заниматься этим неблагодарным трудом.  :)

Чего такие self-explanatory вещи надо объяснять? Работник СУБД не спрашивает что такое SELECT
Два человека откликнулись на твой пост и оба его не поняли.
Конечно ничего объяснять не нужно.  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 12:43
Если человек спрашивает, как создавать объекты по имени класса, то я не буду объяснять ...
А зачем вообще тратить свое время и слова на ленивого? Все равно лучше чем в доке не сказать, так или иначе ему ее прочитать придется

Два человека откликнулись на твой пост и оба его не поняли.
Конечно ничего объяснять не нужно.  :)
В этом есть свои плюсы - значит интересующих меня людей на этом форуме нет. А то что кто-то на каком-то форуме (очень) много знает - ну так этого в стакан не налить и каши не сварить  :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 02, 2011, 14:00
А зачем вообще тратить свое время и слова на ленивого? Все равно лучше чем в доке не сказать, так или иначе ему ее прочитать придется
А спрашивает не всегда ленивый. Если у человека появилась задача из области знаний в которой он плохо ориентируется, то рекомендации что почитать и на что посмотреть ему очень сильно поможет в ее освоении. Не конкретное решение, а именно рекомендации.


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июль 02, 2011, 14:45
гм... скока эмоций)
Igors, боюсь что вы должны для начала определить _ВСЕ_ те термины которые используете)))
и прошу вас запомнить(мой дорогой ученик)))) - таких вещей как "интутивно-понятное" ... не существует.

По крайней мере в общем виде. "интуаитивное понятное" - это как "красный шуршунчик в зачинательной фазе" -  это частное, понятное только говорящему. Потому что это ссылка на понятия с структуры определенные только в мозгу говорящего.
Вы тут говорили про работу с заказчиком? вот поверьте моему более чем 10-летнему опыту непосредсвенной работы системного аналитика  с заказчиком  - вы сейчас точно копируете модель поведения не самых лучших заказчиков - несете какой-то "набор плохо определенных слов", имеющих смысл только для вас, но никак не для слушающих вас. Пытаетесь обобщить ваш частный случай на всех инженеров, сылаетесь на что -то "само-собой разумеющееся" и прочее... инженеры же весьма разные бывают. и области знаний - тоже. не говоря уже о терминологии.. дергаете псевдоумные(имхо) термины вместо простого и понятно "выпуклая фигура" и пр..

Простите, но вещи как "_интуитивно_понятное_" инженеру "выглаживание" - я, например, увы, не знаю) - а смею утверждать, что инженер из меня не такой уж и плохой. Но спецальность у меня не требующая понимания и знаний про "выглаживание" - АСОИиУ. _Для_меня_ _сейчас_ интуитивно понятным является нарезка функциональности  приложения с точки зрения полезностей для пользователя)) но практичка общения и обучения других "инджнеров" говорит что им это как-раз весьма плохо понятно.. и c usecases они работать не умеют...

В общем просто поймите, что вы оперируете частными, плохо определенными понятиями, (фактичски что бубните себе поднос - смысла не больше) и похоже что выступаете с какими-то претензиями к окружающим... "Говорите про какое-то там счастье и что то что вам предлагают не делет вас счастливым..."

так мы не договоримся) хотите получить помощь - извольте без претензий объяснять что вы имеете в виду, не пеленитесь перефразировать и т.п. Давайте ещё раз - сформулируйте вашу задачу, желательно выделить её в отдельный тред и попробуем конструктивно поговорить)))
а то понимаете - постов много, смысла мало - я вот вообще не сразу понял что в треде уже идет обсуждение совершенно иной задачи)))

Спасибо что прочитали до конца.

С уважением, и надеждой на понимание,
ваш Учитель (http://www.prog.org.ru/index.php?topic=18676.msg125786#msg125786)
:)




Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 15:06
Давайте ещё раз - сформулируйте вашу задачу, желательно выделить её в отдельный тред и попробуем конструктивно поговорить)))
а то понимаете - постов много, смысла мало - я вот вообще не сразу понял что в треде уже идет обсуждение совершенно иной задачи)))
Учитель, спасибо конечно за предложение, но наверное не стОит. У меня создалось впечатление что сколько ни объясняй - все равно "непонятно" - просто потому что нет ответа вычитанного в хелпе, ну значит задача плохая :). А тратить время на борьбу с "ветряными мельницами" глупо.


Название: Re: псевдослучайные числа типа float
Отправлено: ufna от Июль 02, 2011, 15:19
если вы не можете что-то объяснить так, что даже школьник вас понял - то скорее всего вы сами это знаете на "так себе" :)


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июль 02, 2011, 15:23
просто ваше определение "Аккуратной" случайной величины - технически не определено.
"равномерно-распределенная" случайная величина вам по всей видимости не подходит - потому что она какая-то "неравномерная(?)" - "точки распределены как бык поссал", не "аккуратно"... понятие аккуратности не определено математически... вот "ранвомерно-распределенная случайная величина" - есть такой термин... а аккуратность - нет...

Кроме того - вы оперируете таким свойством вашего распределения как "невозможность ездить между рядами"...
простите, но это ваши субьективные вещи... они не формализируются... вот мы и не может точно вас понять )
это как "счастье" или "свобода"...

т.е. вы скорее оперируете терминами относящимися более к исскуству/красоте в треде, изначально, посвященном вполне себе математической области...  

вы пытаетесь получить формализированный _алгоритм_области которую не можете формализировать...(по крайней мере ещё не сделали этого) ... чуете противоречие?

да вы дали какое-то похожее на формалиированное описание для "равномерной закраски"... (Quality = 1 / (N * S);) но простите, мне одному кажется что при достижении критерия "равномерной закраски" в максимуме - мы получим стройные ряды точек отделенных одна от другой на одном и том-же расстоянии?(шестигранники или что-то такое))))
т.е. ваш критерий приводит к тому, от чего вы хотите уйти. - в итоге - ваш критерий качества не полон (?) - не точно описывает то что вы хотите... нужно ещё что-то... а что ещё вы не определии.

Ещё я подозреваю что для вас - успехом будет являться нахождение генератора точек на плоскости (есть ещё точки на линии и в пространстве), для которого ваш формальный критерий "качества" будет где-то в районе 0.75 от его максимального значения... нет?

т.к. вы хотите что-то относительно случайное - я могу только посоветовать создавать собственные генераторы случайных величин и способов их использования для расчета координат точек на плоскости/пространстве, и меняя их параметры -  проводить статистические исследования ваших генераторов.
попробуйте использовать случайную величину не для получения координат точек, а для получения расстояния между точками. Как это сделать в варианте 2Д - пока не знаю, но идея как мне кажется интересна)))


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 02, 2011, 15:25
если вы не можете что-то объяснить так, что даже школьник вас понял - то скорее всего вы сами это знаете на "так себе" :)
... поэтому к решению задачи даже подходить не стоит.

Igors, ну ты это заходи если что. Главное что бы ты не бросил свои попытки внятного формулирования вопросов. Здесь только практика...
Понятное формулирование задачи это 50% ее решения. Кто-то сказал, может интернет.

А форум наш действительно не понятливый, 2817 пользователей и ни один не понял твои интуитивно понятные инженерные термины. Ты в какой области инженер?


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июль 02, 2011, 15:55
кстати, BRE, вы же при получении вашей картинки использовали случайные числа для получения координат точек?
что если использовать случайную величину как параметр расстояния между точками?

что если представить что каждая точка - это центр шарика/круга. Мы генерируем набор шариков со случайным диаметром ("равномерно распределенное",  со входными параметрами "матожидание"( как средний диаметр) и ширина области распределения (отклонение от среднего диаметр) - а потом "засыпаем" эти шарики в заданную область пространства.
мне кажется может получится случайная, но достаточно "акуратная" (полагаю в том смысле, как того жаждет Igors) заливка точками)))

у кого есть идеи о том как это реализовать программно?



Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 02, 2011, 16:17
Тема становится популярна)

Водщем выкладываю, как и обещал, распределение точек на сфере.
Генератор Mersenne Twister.
Число точек - число в названии картинки.


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 16:22
ну ты это заходи если что. Главное что бы ты не бросил свои попытки внятного формулирования вопросов. Здесь только практика...
Дай бог если так, но пока я вижу ответы которые я и сам могу прочитать в хелпе - и ни одной своей мысли  :)

что если представить что каждая точка - это центр шарика/круга. Мы генерируем набор шариков со случайным диаметром ("равномерно распределенное",  со входными параметрами "матожидание"( как средний диаметр) и ширина области распределения (отклонение от среднего диаметр) - а потом "засыпаем" эти шарики в заданную область пространства.
Учитель, эта песня давно известна (Delaunay, Voronoy) кстати оба русские математики - вот только здесь она не подходит  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июль 02, 2011, 16:46
Тема становится популярна)

Водщем выкладываю, как и обещал, распределение точек на сфере.
Генератор Mersenne Twister.
Число точек - число в названии картинки.
не, распределение точек не проходит критерия не соответсвия "как бык нассал")  ;D

ну ты это заходи если что. Главное что бы ты не бросил свои попытки внятного формулирования вопросов. Здесь только практика...
Дай бог если так, но пока я вижу ответы которые я и сам могу прочитать в хелпе - и ни одной своей мысли  :)

Учитель, эта песня давно известна (Delaunay, Voronoy) кстати оба русские математики - вот только здесь она не подходит  :)

Ну тогда, дорогой мой ученик, если ваш критерий "аккуратности" не формализируется в "случайное распределение расстояния между точками" - тогда, вам может помочь только психоаналитик или системный аналитик, и только лично, и только за деньги)))

пока вы не сможете мыслить достаточно структурированно и четко, что бы формализированно объяснить нам что же вы хотите - вам не смогут рассказать как это сделать))) (а то пока получается как том анекдоте.. "да что же за мужики пошли.. не могут удовлетворить бедную девушку..." - мы тут и так и эдак все пробовали - а девушка сама не знает что хочет.... )))))



Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 02, 2011, 16:50
Тема становится популярна)

Водщем выкладываю, как и обещал, распределение точек на сфере.
Генератор Mersenne Twister.
Число точек - число в названии картинки.
не, распределение точек не проходит критерия не соответсвия "как был нассал")  ;D
В смысле? В смысле,  это хорошо или плохо?

Я доверяю Mersenne Twister)) Как то давно приходилось его тестировать на случайность)) 



Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 16:57
не, распределение точек не проходит критерия не соответсвия "как был нассал")  ;D
А разве не так? :) Ну может грубовато сказано, но по существу. Посмотрите на хорошие свободные участки (места для пикника) - а если там объект будет, так что, самплер его прохлопает ушами? И сразу "в несознанку" - мол, не умеешь сформулировать задачу и все такое. Чего ж на зеркало пенять если ..<public forum>


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июль 02, 2011, 16:58
Цитировать
не, распределение точек не проходит критерия не соответсвия "как был нассал")  ;D
В смысле? В смысле,  это хорошо или плохо?
Я доверяю Mersenne Twister)) Как то давно приходилось его тестировать на случайность))
Вы знаете, я тоже не знаю, хорошо это или плохо, а главное как это однозначно определить, (мы все тут уже 4 страницы пытаемся понять что же такое хочет Igors, и как это можно формализовать)... предыдущая попытка предоставить результаты с точками на плоскости была забракована моим нерадивым студентом под предлогом "точки распределены не аккруатно, как бык нассал" (http://www.prog.org.ru/index.php?topic=18676.msg125761#msg125761). С моей точки зрения - если сравнивать субьективно примеры "аккуратного распределения" от нашего студента с вашим Mersenne Twister - то Mersenne Twister - это "как бык поссал".

Что же он точно имел в виду и чего хочет я вот пока не знаю) мои предположения были забракованы 2-я постами выше (http://www.prog.org.ru/index.php?topic=18676.msg125866#msg125866)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 02, 2011, 17:03
у кого есть идеи о том как это реализовать программно?
Решение никому не нужно, ты разве не понял?
Смысл всех постов - это вброс "потока сознания" и дальнейшее написание высокомерных постов про отсутствие решения в хелпе/бусте/assistant/...
Человек так самоутверждается, по другому видно не получается.


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 02, 2011, 18:13
Пойду погуляю с собачкой)
Потом поделюсь своими соображениями по всему этому делу)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 18:27
Я доверяю Mersenne Twister)) Как то давно приходилось его тестировать на случайность))  
Ну привет, а очевидное сгущение у полюсов Вас не смущает? Ведь в полярных координатах только phi (азимут) "белый" а theta (угол возвышения) - совсем нет. Как бум исправлять?  :)

Решение никому не нужно, ты разве не понял?
Смысл всех постов - это вброс "потока сознания"
BRE я прошу Вас вести себя цивильно и на личности не переходить. Я никого не оскорбил и ничем не нарушил правила форума (если не так - поправьте). Если Вам тема неинтересна - спокойно промолчите, а не пытайтесь другим закрыть рот (все равно не получится).

а главное как это однозначно определить, (мы все тут уже 4 страницы пытаемся понять что же такое хочет Igors, и как это можно формализовать).
...
Что же он точно имел в виду и чего хочет я вот пока не знаю)
Учитель, давайте "по жизни". Есть "поверхность" которая может иметь много миллионов точек для визуализации. Честно считать каждую из них - ну это десятки и десятки часов расчетов. Поэтому давайте считать только "некоторые" точки (самплы), остальные - интерполировать.  Разумеется мы понимаем (и принимаем) правила игры - что наш расчет быстр но приблизителен, будут погрешности интерполяции и.т.п. - обо всем этом мы с заказчиком договоримся, это наша забота.

Очень быстро выясняется что задача сводится к тому что я изложил в посте #8, т.е. по-умному расставить точки. Иначе придется долго пыль глотать с ненужными расчетами.  Это абсолютно НОРМАЛЬНАЯ постановка реальной задачи, и Ваньку валять (мол, не понимаю, не формализовано) здесь нечего  :)


Название: Re: псевдослучайные числа типа float
Отправлено: ufna от Июль 02, 2011, 18:35
Ну у Вас с инструментарием все Ок (не сомневался), но точки распределены как бык поссал - а надо аккуратно (attachment)

А можно то же самое, только:

 - с расстоянием между точками в 2 раза больше.
 - с расстоянием между точками в 2 раза меньше.


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 19:11
Ну у Вас с инструментарием все Ок (не сомневался), но точки распределены как бык поссал - а надо аккуратно (attachment)

А можно то же самое, только:

 - с расстоянием между точками в 2 раза больше.
 - с расстоянием между точками в 2 раза меньше.
Расстояние не контролируется - просто можно изменить число самплов (тот же эффект)


Название: Re: псевдослучайные числа типа float
Отправлено: LisandreL от Июль 02, 2011, 19:47
Как-то оно слишком упорядоченно для случайного.


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 20:03
Как-то оно слишком упорядоченно для случайного.
Цель "поймать" все что под точками - желательно с наименьшим числом точек. А уж как (случайно или нет) - проблема разработчика   :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 02, 2011, 20:21
Цель "поймать" все что под точками - желательно с наименьшим числом точек. А уж как (случайно или нет) - проблема разработчика   :)
Фух, пятая страница обсуждения - узнали цель...
Теперь, боюсь спросить, что подразумевать под "все что под точками"? Что это за объекты, как они организованы?
Что-то мне подсказывает, что случайно тыкать в пространство для поиска объектов не очень хорошая идея.



Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 02, 2011, 22:02
Фух, пятая страница обсуждения - узнали цель...
Теперь, боюсь спросить, что подразумевать под "все что под точками"? Что это за объекты, как они организованы?
Ну примерно с тем же успехом можно спросить "а что за QObject, зачем определять Q_OBJECT, связывать слоты/сигналы?". Просто в данном контексте "самплинг" примерно такая же базовая позиция. 

Что-то мне подсказывает, что случайно тыкать в пространство для поиска объектов не очень хорошая идея.
Та подсказывает правильно, за последние 15-20 лет (это только на моей памяти) было предпринято множество попыток придумать что-то получше (кстати я тоже пытался). Вот только ни одна из них пока успехом не увенчалась :)  В каком-то частном случае (обычно games) удается - но это достигается за счет массы допущений/предрасчетов.  А в общем случае чтобы просчитать soft shadow (простейшее применение) - самллы и вперед. Так что ото носом не крутите - а делайте что говорят. Если можете  :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 02, 2011, 22:55
Та подсказывает правильно, за последние 15-20 лет (это только на моей памяти) было предпринято множество попыток придумать что-то получше
За это время только я (особо за этим не следя) помню: метод сетки, двоичные деревья, квадратные деревья, а вот "пальцем в небо" и что бы аккуратно... не помню. Что можно почитать про эту технологию, где использовалась?

(кстати я тоже пытался).
::)
Внутри у меня прямо гордость какая-то...

В каком-то частном случае (обычно games) удается - но это достигается за счет массы допущений/предрасчетов.
В программировании так со всем. Все время нужно балансировать между плюсами и минусами решения. Топик про идиальный контейнер помнишь? Я там несколько раз об этом писал.  :)


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 03, 2011, 00:07
И так..
Во-первых, по поводу:
Цитировать
Ну привет, а очевидное сгущение у полюсов Вас не смущает? Ведь в полярных координатах только phi (азимут) "белый" а theta (угол возвышения) - совсем нет. Как бум исправлять?  Улыбающийся
Меня это не смущает) Почему так, разве, не очевидно?
На самом деле точки на сфере распределяются равномерно. А эффект такого их сгущения на полюсах и экваторе обязан тому, что это есть отображение трёхмерного объекта на плоскость. В данном случае, видны также и точки, которые находятся в "теневой" (обратная сторона поверхности) области сферы (т.е. те точки которые мы видеть не должны). И поскольку в окрестности полюсов угол между нормалью к поверхности и осью z мал, то визуально кажется, что плотностьточек там больше.

Те распределения, что привёл Igors даже чисто визуально нельзя назвать статистически случайным. На глаз уже видна корреляция в распределении точек, от чего так стремятся избавиться в алгоритмах случайных чисел. Поэтому я тож склоняюсь к
мнению BRE, что
Цитировать
Что-то мне подсказывает, что случайно тыкать в пространство для поиска объектов не очень хорошая идея.

ИМХО, но раз уж такой расклад, то нужно делать регулярную треугольную решётку (одинаковое растояние между точками), но для имитации случайности, вводить флуктуации (по средством того же генератора случайных чисел) в расположении узлов решётки.
И будет вам счастье)
Тема то тривиальная.. А развели тут битву сомолюбий на пять страниц..
Стыдно товарищи))


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 03, 2011, 10:37
Меня это не смущает) Почему так, разве, не очевидно?
На самом деле точки на сфере распределяются равномерно. А эффект такого их сгущения на полюсах и экваторе обязан тому, что это есть отображение трёхмерного объекта на плоскость.
m_ax ну чего (неумело) заливать если Ваши же картинки показывают что это совсем не так? :) Вы генерируете theta "белым" шумом но ведь для сферы это не соответствует равномерному распределению - просто возьмите определенный интеграл по объему - для Вас это семечки (если вся силенка не ушла в Ububtu и командную строку).

ИМХО, но раз уж такой расклад, то нужно делать регулярную треугольную решётку (одинаковое растояние между точками), но для имитации случайности, вводить флуктуации (по средством того же генератора случайных чисел) в расположении узлов решётки.
И будет вам счастье)
Тема то тривиальная..
Так, ну мысль работает - это уже хорошо. То о чем Вы говорите известно как "naive implementation". Где вы возьмете изначальные (равномерные) самплы? Как это сделать для той же сферы? Для модели из треугольников? Ну ладно, простейший случай - плоскость, вроде все хорошо, добавили (сместили) каждую точку. Но на деле такой самплер плох - даем мало шума - видна "решетка", даем  больше - получаем примерно то же что показал BRE

Мне кажется все беды происходят от недооценки задачи (мол, да я, да щас и.т.п). А задачка требует определенного внимания/уважения. Вы уж простите старика если что не так  :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 03, 2011, 13:37
Камрады, кто понял или считает что понял все эти требования. Объясните мне пожалуйста простым не "инженерным языком", что же нужно получить.

Итак, равномерная сетка не подходит потому, что "у него можно слона вынести". Исходя из этого (пост #43):
Цитировать
Ладно, то "лирика". А технически такой "самплер" никуда не годится - несмотря на якобы идеальное число точек у него под носом можно слона вынести. Уж лучше накидать абы-как случайно.
Следующий вопрос собственно, почему лучше "накидать абы-как случайно"? Кто это сказал? На основании чего сделан этот вывод? Как можно быть уверенным, что случайно попадешь во все объекты?

Ну и последний вопрос, нарисуйте же пожалуйста "аккуратную сетку" и выложите в теме. Что должны получить, к чему стремиться? Жаждю ее увидеть. ;)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 03, 2011, 14:10
Следующий вопрос собственно, почему лучше "накидать абы-как случайно"? Кто это сказал? На основании чего сделан этот вывод? Как можно быть уверенным, что случайно попадешь во все объекты?
Ага, пытаетесь соображать - welcome. Конечно всегда существует "достаточно мелкий" объект который  самплер не поймает. Это нормально, если мы разбросали напр 100 точек - ну так точность и будет невелика.  Вопрос в том насколько? И как поставить точки чтобы минимизировать потери? Очевидно что просто "регулярно" не катит (уже обсуждалось выше) - а тогда как?

Ну и последний вопрос, нарисуйте же пожалуйста "аккуратную сетку" и выложите в теме. Что должны получить, к чему стремиться? Жаждю ее увидеть. ;)
Та она давно предъявлена в посте #19 и др по просьбе ufna


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 03, 2011, 14:33
Ага, пытаетесь соображать - welcome.
Да я и не заканчивал, все пытаюсь тебя уговорить этим заняться.

Я не буду спрашивать почему такое расположение точек ты считаешь лучшим по сравнению с равномерной сетки или полностью случайным расположением. Пока допустим, что это так.
Ну так вот, давай попробуем нормальными словами описать те необходимые для тебя свойства, которые есть в картинке из поста #19 и нет у картинке из поста #16. Чем эти картинки отличаются?
Ну только без "инженерных терминов".  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 03, 2011, 17:40
Да я и не заканчивал,
Хмм...   :)

Ну так вот, давай попробуем нормальными словами описать те необходимые для тебя свойства, которые есть в картинке из поста #19 и нет у картинке из поста #16. Чем эти картинки отличаются?
Ну только без "инженерных терминов".  :)
Ну давайте "в популярной форме". Какую конвексную фигуру (по-простому говоря "выпуклый многоугольник") можно свободно разместить между Вашими точками (пост #16)? Довольно большую. А точек намолотили 20K. В посте #19 точек 1K а площадь примерно та же. Доступно излагаю?  :)


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 03, 2011, 17:58
Какую конвексную фигуру (по-простому говоря "выпуклый многоугольник") можно свободно разместить между Вашими точками (пост #16)?
Между какими конкретно точками? Там их 20К? Что значит довольно большую? Это что за математический термин "довольно большую"?
На этих картинках размер точек немного отличается. Не? Если увеличить их размер еще, то будет достаточно 4 точек. Может это выход? :)

Еще раз посмотри на две этих картинки и найди важные отличия.


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 03, 2011, 18:30
Между какими конкретно точками? Там их 20К? Что значит довольно большую? Это что за математический термин "довольно большую"?
На этих картинках размер точек немного отличается. Не? Если увеличить их размер еще, то будет достаточно 4 точек. Может это выход? :)

Еще раз посмотри на две этих картинки и найди важные отличия.
Ну есть "задача" и можно долго петь песню что, мол, "заказчик неграмотный", "он не понимает чего хочет" и.т.д. и.т.п. - все это хорошо известно (и иногда даже правда). Но если Вы так считаете - спокойно скажите "я пас", не тратьте свое и чужое время. Мне совершенно не нужен человек который изо всех сил старается доказать что "он умнее".  Да пусть он будет умнее/глупее - был бы толк, а от Вас его ноль. Будьте здоровы.


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 03, 2011, 20:26
Ну есть "задача" и можно долго петь песню что, мол, "заказчик неграмотный", "он не понимает чего хочет" и.т.д. и.т.п.
Ну-ну, без паники, только без паники. (с) Карлсон.

Давай я попробую задать вопрос более доступно для тебя. Посмотри на три картинки:
1 - в этом посте;
2 - в посте #16;
3 - в посте #19

и попробуй из них выбрать две, наиболее похожих между собой.


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июль 03, 2011, 21:11
Очень быстро выясняется что задача сводится к тому что я изложил в посте #8, т.е. по-умному расставить точки. Иначе придется долго пыль глотать с ненужными расчетами.  Это абсолютно НОРМАЛЬНАЯ постановка реальной задачи, и Ваньку валять (мол, не понимаю, не формализовано) здесь нечего  :)
Увы, нет, дорогой мой друг)
это НЕ нормальная постановка реальной задачи. Это вообще не постановка задачи.
Это детский лепет, feature, рекламный слоган, хочушка, пожелание, ещё что то.... но ни в коем разе не "постановка задачи".

Понимаете-ли, для постановки задачи, нужны "критерии приемки". Явно определенные в самой постановке, или иногда, "однозначно вытекающие". Потому что пока их нет - не понятно к чему стремиться, не понятно в какой момент и при каких условиях задача считается решенной.

Если вы, или кто-то другой, по своей детской наивности (или старческому маразму) считает что "постановка" без внятных критериев приемки результата может "быть нормальной" - то, мягко говоря - он ССЗБ. И извините, но этому человеку помочь нельзя (по крайней мере сейчас).
Это все равно, что пытаться "удовлетворить" девушку, которая не в состоянии хоть как-либо внятно объяснить что же она хочет - это себе дороже выйдет)

Мы вот попытались угадать, но вот не вышло)))

Ну есть "задача" и можно долго петь песню что, мол, "заказчик неграмотный", "он не понимает чего хочет" и.т.д. и.т.п. - все это хорошо известно (и иногда даже правда). Но если Вы так считаете - спокойно скажите "я пас", не тратьте свое и чужое время. Мне совершенно не нужен человек который изо всех сил старается доказать что "он умнее".  
Мы пытаемся от вас добиться формализированного описания критериев приемки. Как только у нас будет "целевая функция", описывающая насколько хорошим является то или иное распределение - тогда уже можно будет пытаться строить те или иные алгоритмы раскидывания точек.

Потому, дорогой мой студент, давайте вернемся к самому тому началу: опишите формализированно, в формулах, и уравнениях с описанием каждого из параметров - какими качествами должен обладать набор точек на плоскости, чтобы вы забились от такого набора в экстазе.
Как только вы это сделаете - можно уже начать строить алгоритм построения такого набора точек, и думать над тем как его оптимизировать, что бы он был быстрым.

Это не крики о том что заказчик плохой или что-то ещё. Решить задачу, пока не понятно что мы ищем, и даже не можем внятно описать качества того что мы ищем - невозможно.

Я надеюсь, что раз вы знаете такое слово как "постановка задачи", то вы и должны знать какими качествами обладают критерии приемки? (однозначность, проверяемость, и прочее?)

Описание типа "бык поссал", "ездить между рядами", "аккуратно", ну то есть случайно, но более-менее равномерно, так чтобы не было ни заметных "сгущений" ни заметных пустых мест - это невнятный бред сивой кобылы в сферическом вакууме; бред, который не является постановкой и не определяет критерии приемки.

Понятия "заметное сгущение", "заметное пустое место" - алгоритмически/математически не описаны, и что вы имеете в виду под этим - не понятно. Что вы имеете в виду под "квази случайностью" - тоже одному вам из людей понятно... хотя сомневаюсь что вы можете это выразить внятно... ваше описание не обладает однозначными критериями по которым можно было бы сказать есть в распределении "заметные сгущения или пустые места". ни однозначностью, ни проверяемостью в ваших "описаниях" и не пахнет.

А вот как только вы сможете написать программу которая будет способна переработать массив точек и сказать хороший он или плохой - вот тогда мы с вами сдвинемся с мертвой точки. Мы сможем начать думать над тем, какой алгоритм генерации набора точек вам подойдет.

Или давайте начнем сначала определение формальных критериев приемки, которые определят "качество" набора точек - и только потм будем думать над тем как такой набор построить.

А пока у вас каша в голове - вы валите все в кучу, и хотите найти "решение" задачи, для которой не способны внятно определить критерии приемки результата. Давайте попытаемся избавиться от этой каши и для начала разложить все по полочкам?


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 04, 2011, 06:26
Похоже?  :)


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 04, 2011, 11:33
Цитировать
m_ax ну чего (неумело) заливать если Ваши же картинки показывают что это совсем не так? Улыбающийся Вы генерируете theta "белым" шумом но ведь для сферы это не соответствует равномерному распределению
Да, пардон) Согласен, на полюсах плотность точек будет больше нежели на экваторе.
Но это можно исправить. Распределение для theta уже не будет однородным.

Похоже?  :)


Я бы ещё попробывал описывать флуктуации узлов с помощью нормального распределения (гауссова). С сигмой порядка полурасстояния между узлами (на фкус).   


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 04, 2011, 11:35
Да похоже-то оно похоже, вот только только не годится. В первом случае вообще "слон" о котором я говорил - и в архитектурной сцене такой стопудово найдется. Второй вполне usable, но тоже не блеск (оба в attach). Кроме того виден "мотив" - а это значит систематическая помеха которую никакой фильтр не возьмет. И потом - это на плоскости легко иметь регулярные изначальные точки - а на той же сфере как?

это НЕ нормальная постановка реальной задачи. ..
Учитель, а можно короче и по делу? А то Вы как Михаил Сергеевич "растекаетесь мыслью по древу" :) Мы можем "обсуждать" вещи, увлекаться, сказать глупость, молоть чепуху - но на мой взгляд это гораздо интереснее чем выдать готовое решение из головы-справочника - не вижу в этом никакого кайфа  :)


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 04, 2011, 12:18
Подправил вариант со сферой)
Алгорит сейчас такой:
Генерим три случайных велечины в интервале [-1, 1] (фактически cos между соответствующими осями)
Затем нормализуем их так, что вектор, компонентами которого она являются был единичным:
Код
C++ (Qt)
MTRand mtRand;
   mtRand.seed(time(0));
   for (int i = 0; i < m_numPoints; ++i) {
       double alpha = mtRand.rand(2.0)-1.0;
       double betta = mtRand.rand(2.0)-1.0;
       double gamma = mtRand.rand(2.0)-1.0;
       double norm = sqrt(alpha*alpha + betta*betta + gamma*gamma);
 
       alpha /= norm;
       betta /= norm;
       gamma /= norm;
 
       double z = m_radius*gamma;
       double x = m_radius*alpha;
       double y = m_radius*betta;
       drawPoint(Point3D(x, y, z), &painter, 2);
   }
 
Теперь это выглядит так:


Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 04, 2011, 12:43
Да похоже-то оно похоже, вот только только не годится. В первом случае вообще "слон" о котором я говорил - и в архитектурной сцене такой стопудово найдется. Второй вполне usable, но тоже не блеск (оба в attach).
Ага. Теперь давай попробуем без истерик выяснить а какие "слоны" вообще возможны? Без этого очень тяжело оценивать качество распределения.
Как ты понимаешь, без этих критериев я могу на твоей "идеальной сетке" разместить кучу подобных "слонов".  ;)



Название: Re: псевдослучайные числа типа float
Отправлено: BRE от Июль 04, 2011, 12:47
Я бы ещё попробывал описывать флуктуации узлов с помощью нормального распределения (гауссова). С сигмой порядка полурасстояния между узлами (на фкус).   
Не-не, рано. Не все исходные данные о задачи мы получили. Так мы долго будет играть в игру "похоже - не похоже".  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Denjs от Июль 04, 2011, 13:27
Учитель, а можно короче и по делу? А то Вы как Михаил Сергеевич "растекаетесь мыслью по древу" :) Мы можем "обсуждать" вещи, увлекаться, сказать глупость, молоть чепуху - но на мой взгляд это гораздо интереснее чем выдать готовое решение из головы-справочника - не вижу в этом никакого кайфа  :)
дорогой мой, хватит заниматься чепухой. Вы или не слушаете, или глупы.
По делу я вам все уже сказал, но можно ещё раз, для задних парт:
Опишите алгоритм проверки массива точек, который выдает - хороший или плохой набор точек мы имеем.
Алгоритм, который можно запрограммировать.


Тогда мы сможем найти (подобрать в результате исследования параметров и перебора разных методов генерации точек) или создать вам генератор, который будет быстро и легко создавать вам нужный набор точек. Ночь машинных расчетов с перебором или поиском нужных параметров генераторов  - и все будет...
А пока вы уже пятые сутки занимаетесь переливанием из пустого в порожнее, если не сказать как есть, но это будет чрезмерно грубо.

вон и BRE  вас уже не первый раз об этом тоже просит...
Ага. Теперь давай попробуем без истерик выяснить а какие "слоны" вообще возможны? Без этого очень тяжело оценивать качество распределения.
Как ты понимаешь, без этих критериев я могу на твоей "идеальной сетке" разместить кучу подобных "слонов".  ;)


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 04, 2011, 13:40
Я бы ещё попробывал описывать флуктуации узлов с помощью нормального распределения (гауссова). С сигмой порядка полурасстояния между узлами (на фкус).   
Не-не, рано. Не все исходные данные о задачи мы получили. Так мы долго будет играть в игру "похоже - не похоже".  :)

:) Вобщем, ради любопытства попробывал реализовать случай, когда узлы изночально регулярной квадратной решётки (вообще надо было делать треугольную, ну да фиг с ней) флуктуируют от своих положений, причём смещения распределены по гауссу.
И так, период решётки кладу еденицы (условно)
Тогда, sigma измеряется в единицах периода решётки.
Ниже приведены расспределения для
1) sigma = 0;
2) sigma = 0.1;
3) sigma = 0.25;
4) sigma = 0.5.
   


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 04, 2011, 15:26
И вот вриант с изночальной треугольной решёткой:
1) sigma = 0
2) sigma = 0.1
3) sima = 0.15
4) sigma = 0.2


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 05, 2011, 17:53
Ага. Теперь давай попробуем без истерик выяснить а какие "слоны" вообще возможны? Без этого очень тяжело оценивать качество распределения.
Как ты понимаешь, без этих критериев я могу на твоей "идеальной сетке" разместить кучу подобных "слонов".  ;)
Ну давайте возьмем максимально упрощенный случай: для каждой точки выполняется расчет с результатом типа bool: false - точка перекрыта препятствием (тень) или true (приходит порция света). Просчитав все точки, мы, не мудрствуя лукаво, поделили число true на N (число точек). У Вас на картинке явно видны "ряды" (мотив) который очень быстро подгадит. При одном расчете весь "ряд" возвращает напр. false, при другом (смежном) уже true. Для "пустот" (слонов) ситуация та же самая. Хотя полностью случайное распределение выглядит ужасно, оно все же лучше - меьшая фигура может проскочить между точками.

Не-не, рано. Не все исходные данные о задачи мы получили.
Полные данные о задаче (иногда) известны только после ее решения :) В посте #8 изложена вполне доступная, реальная формулировка. Факт что случайное распределение часто превосходит равномерное - довольно известный. Формальный критерий - оценка по площади тоже есть. Хороший тест - "реконструкция" которая также предлагалась выше - и оценка радиуса фильтра требующегося для выглаживания. В общем данных заметно больше чем их бывает в жизни. Хотя есть танцоры которым все время что-то мешает  :)

И вот вриант с изночальной треугольной решёткой:
1) sigma = 0
2) sigma = 0.1
3) sima = 0.15
4) sigma = 0.2
Конечно, метод рабочий, но, как Вы сами убедились, подобрать подходящее sigma (шум смещения) совсем непросто. Также для одного N (числа точек) одно sigma выглядит приятнее, для другого - уже другое. Ну и это не дает ответа "а что же делать на сфере" - тот же подход оказывается очень громоздким.


Название: Re: псевдослучайные числа типа float
Отправлено: m_ax от Июль 05, 2011, 18:06
Цитировать
Конечно, метод рабочий, но, как Вы сами убедились, подобрать подходящее sigma (шум смещения) совсем непросто. Также для одного N (числа точек) одно sigma выглядит приятнее, для другого - уже другое. Ну и это не дает ответа "а что же делать на сфере" - тот же подход оказывается очень громоздким.
Ничего подобного, это просто)).
sigma не зависит от числа точек, она зависит от их плотности: т.е. числа точек на единицу площади (которое уж надеюсь известно или задано). И мерится она (sigma) в еденицах периода решётки, который из плотности точек можно получить (во всяком случае оценить).  


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

Ну а со сферой упорно отмалчиваемся  :)


Название: Re: псевдослучайные числа типа float
Отправлено: Igors от Июль 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)