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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2 3 ... 115
1  Программирование / Алгоритмы / Re: За стенкой или нет? : Январь 14, 2017, 12:23
Цитировать
Совсем не понял Ваш острожный намек
Я имел в виду (но похоже это не тот случай), что там, где точно численно задача не представляется возможной, можно попробовать использовать стохастические (случайные) процессы. Точнее свести задачу к некоторому усреднению по  ансамблю таких систем.. Т.е. накидываем случайным образом N точек "фотонов", смотрим какая часть из них куда попала и на основе этого вытаскиваем нужные наблюдаемые..

Цитировать
Непонятно почему никто не предложил поанализировать "расклад" фотонов? Вот неск "паттернов" (аттач). Есть напр такой метод (встречал неск перепечаток)
Вообще, не совсем понятно, для чего? Что это вообще даёт?
Цитировать
- находим все фотоны в радиусе R и сортируем их по расстоянию от центра (целевой точки)
Хорошо, находим.. Зачем их сортировать?
Цитировать
- добавляя фотон за фотоном получаем ф-цию F(R). Напр для радиуса 1 имеем такую плотность, для R = 2 другую и.т.д.
Ну предположим.. И что? Вы уже сразу предполагаете, что распределение будет зависеть только от расстояния до центра, но вообще говоря, оно может быть и анизотропным..
Цитировать
- отлавливаем значение R когда ф-ция начинает "монотонно убывать/возрастать".  По-простому это как бы мы "зацепили" чужой свет/тень. Все, возвращаем значение плотности для пойманного R

С увеличением R, рано или поздно функция конечно будет сглаживаться всё больше и больше, если мы говорим о плотности F(R) = N/S, (S = pi R^2 - площадь). Чем больше R - тем более сильное усреднение мы получаем - более размазанное и сглаженное описание.  
Цитировать
По-простому это как бы мы "зацепили" чужой свет/тень. Все, возвращаем значение плотности для пойманного R
Как по интегральной, усреднённой величине мы делаем вывод о том, что мы там чего то зацепили?

    
2  Программирование / Алгоритмы / Re: За стенкой или нет? : Январь 12, 2017, 18:21
Интересно, а кто остальные половиначеловека?  Смеющийся

Нет, на самом деле, если грамотно поставить задачу, в категориях максимально отдалённых от предметной области (включая жаргон и т.п.) т.е. максимально абстрагироваться от этого всего, то почему бы и нет? Другое дело, что здесь как раз это, как правило, не работает) В процессе возникают новые условия, требования и т.д. и т.п.. В этом основная проблема, на мой взгляд) 
3  Программирование / Алгоритмы / Re: За стенкой или нет? : Январь 12, 2017, 18:05
Так, сходу не вышло. Гугление тоже ничего реального не дает. Что бум делать? Или Вы в такой ситуации никогда не оказываетесь? Странно если так, я - частенько  Улыбающийся

Ладно, попробуем переформулировать/упростить задачу. Считаем что запросная точка принадлежит какому-то полигону (хотя в общем случае это не всегда так). Также считаем что полигоны объединены в группы/модели которые есть нормальные/цивильные поверхности. В принципе проблемы те же самые, см аттач. В круге части поверхности может просто не быть. Задача та же самая - скорректировать площадь и отбраковать фотоны за пределами поверхности (это "нашей" поверхности там нет, а другие могут быть).  Разница - мы знаем "открытый край" т.е. где наша поверхность закончилась
Я бы посмотрел на возможность использования методов Монте Карло, если затраты на определение принадлежности точки (фотона) нужной области не столь критичны.. Но это так, наивный взгляд со стороны) 
4  Qt / Вопросы новичков / Re: Новичкам про потоки : Январь 12, 2017, 17:28
m_ax, что значит похерилось, не совсем понимаю, оно может как-то испортиться? Если я в ячейку, где хранится 5 пишу 6 и одновременно считываю эту же ячейку, то при считывании получу или 5 или 6, в моём понимании.
Если, в общем случае, запись/чтение не атомарна, то при одновременной записи и чтении, кто его знает, что на выходе можно получить..) Может 5, а может 6, а может и 100500  Улыбающийся  
Короче, лучше не рисковать)
5  Разное / Говорилка / Re: Геометрия (задачки) : Январь 12, 2017, 17:08
Цитировать
Хотя странно, честно говоря - ведь в данном примере агрумент atan это константа, а не переменная.
Надо посмотреть, что там по этому поводу стандарт говорит)
6  Qt / Вопросы новичков / Re: Новичкам про потоки : Январь 12, 2017, 16:08
Не, в моём случае не страшно их делать не атомарными. Запись делает 1 поток, чтение другой. Не важно, если на момент отображения реальный прогресс убежит вперёд.
Там atomic нужен чтоб значение счётчика не похерилось, в ситуации одновременного чтения и записи)
7  Разное / Говорилка / Re: Геометрия (задачки) : Январь 12, 2017, 15:30
Цитировать
На всякий случай, atan не constexpr по стандарту. Clang не скомпилирует.
Ну да, там просто const должен быть, конечно)
8  Разное / Говорилка / Re: Геометрия (задачки) : Январь 12, 2017, 14:56
Цитировать
Генерация случайного вектора в сферической СК - популярные грабли, она не дает равномерного распределения
Ну с этим никто не спорит..

Однако если выбрать параметризацию, в которой случайной величиной является проекция ед. вектора на ось z и угол phi:
Код
C++ (Qt)
static const double pi = 4.0*atan(1.0);
 
inline double sign(const double & x) { return (x >= 0.0) ? 1 : -1; }
 
 
int main()
{
   random_device rd;
   mt19937 gen(rd());
 
   uniform_real_distribution<double> phi_dist(0.0, 2.0*pi); // распределение для угла phi
   uniform_real_distribution<double> z_dist(-1.0, 1.0); // распределение для проекции вектора на ось z
 
 
   const int num = 1000 * 1024;
   double sum[5] = { 0.0 };
   for (int i = 0; i < num; ++i)
   {
       double z = z_dist(gen);
       double phi = phi_dist(gen);
 
       double x = sign(z)*sqrt(1.0 - z*z)*cos(phi);
       double y = sign(z)*sqrt(1.0 - z*z)*sin(phi);
 
 
       double x2 = x*x;
       double y2 = y*y;
       double z2 = z*z;
       sum[0] += x2;
       sum[1] += x2 * x2;
       sum[2] += x2 * y2;
       sum[3] += x2 * z2;
   }
   for (int i = 0; i < 4; ++i)
       cout << (sum[i] / num) << endl;
 
   return 0;
}
 

то всё будет корректно. Такое усреднение будет соответствовать интегрированию по телесному углу.

Выкладываю pdf с выводом формулы для среднего от произведения ni nj nk nl


9  Qt / Вопросы новичков / Re: Новичкам про потоки : Январь 11, 2017, 20:52
Цитировать
А что-бы проанализировать другие решения нужно будет разобраться с какими нибудь итераторами? Не-не-не.  Улыбающийся
Да-да, вот третьим пунктом как раз про итераторы и stl хотел написать, но остановился..  Улыбающийся
Это как раз другая крайность - инертность к иным (отличным) технологиям и подходам, что сегодня есть здесь и сейчас.. Та противодействующая сила эволюции, что поддерживает видит либо чёрное, либо белое..
10  Qt / Вопросы новичков / Re: Новичкам про потоки : Январь 11, 2017, 19:09
m_ax, ты дерзай, а я прикремплю. Смеющийся
Боюсь, запинают  Улыбающийся

Да и программированием я особо то и не занимаюсь, так уж, чисто балуюсь)  

Цитировать
В прошлый раз Вы говорили лучше: "букварь - пойло для лохов"   Улыбающийся
Старею, да)

Цитировать
Тоже очень полезный совет (пусть и доведенный до абсурда).
Полезным он будет тогда, когда программист критически подходит к своему велосипедотворчеству. Когда сперва он проанализирует другие решения, их плюсы и минусы. И только после этого, может быть, это будет оправдано.. 
11  Разное / Говорилка / Re: Геометрия (задачки) : Январь 11, 2017, 17:45
Цитировать
Или я где-то насвистел в тесте?
Дело в тесте, точнее в
Код
C++ (Qt)
QVector3D vec(RandF(), RandF(), RandF());
vec.normalize();
 
Это не даёт честного равновероятного распределения по направлениям, поэтому и результаты плывут..
Должно быть, конечно:
1/3
1/5
1/15
1/15

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


12  Qt / Вопросы новичков / Re: Новичкам про потоки : Январь 11, 2017, 13:57
Я бы ещё создал тему "Вредные советы по программированию для новичков"  в какой-нибудь сатирической форме Улыбающийся Типа:
1) Запомните раз и навсегда - букварь - Зло! Зло с большой буквы! Не засоряйте свой чердак всяким хламом, чердак не резиновый: Помните, Букварь убивает творческое мышление!
2) Никогда, никогда не используйте готовые решения - всегда изобретайте своё. Скорее всего Ваше решение получится более удобным, правильным и расширяемым и главное, понятным, для всех! К тому же это развивает творческое мышление, а Вы Творец (все умрут, а я грейпфрут!).
3) ...

Ну и т.д.  Подмигивающий
13  Разное / Говорилка / Re: Геометрия (задачки) : Январь 10, 2017, 16:03
Цитировать
Ответ: (dot(a, b) * dot(c, d) + dot(a, c) * dot(b, d) + dot(a, d) * dot(b, c)) / 9
Да, верно, только не на 9, а на 15 нужно делить.
14  Qt / Кладовая готовых решений / Re: qRegexReplace - аналог boost::regex_replace : Январь 10, 2017, 16:00
Цитировать
Cимпатичнее напр так
Да, и заставлять пользователя брать на себя ответственность за разбор (в функторе) - опять проверять, отлаживаться и т.д.. А если завтра ситуация по сложней окажется?
Нет уж)

Цитировать
Напр код выше можно запустить в 2 прохода, чтобы предвычислить длину рез-та, но по-моему это уже перегиб
Да, согласен, перегиб.. 
15  Qt / Кладовая готовых решений / Re: qRegexReplace - аналог boost::regex_replace : Январь 10, 2017, 15:06
Цитировать
Даёшь Qoost!
Смеющийся Пссс.. /* шёпотом  */ Вы такими призывами некоторых товарищей до инфаркта доведёте..  Смеющийся
Страниц: [1] 2 3 ... 115
Страница сгенерирована за 0.111 секунд. Запросов: 23.