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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1] 2 3 ... 115
1  Разное / Говорилка / Re: Старая шутка : Февраль 23, 2017, 19:17
Цитировать
Тогда все сразу становится очень натуральным. Ну это всего лишь "я так думаю"
Да, да,  с таким подходом можно оправдать любой говнокод)
2  Разное / Говорилка / Re: Геометрия (задачки) : Январь 29, 2017, 15:15
Цитировать
Ну как всегда, сами напутаете - а я виноват
Конечно. Нужно корректно ставить задачу.
Сейчас выясняется что есть ещё и шаг dt и т.д. и т.п..

Цитировать
Практически нужно знать что они уже столкнулись или столкнутся в течение заданного интервала времени dt
Ну и в чём проблема тогда? Скорость сближения/разбегания известна, относительное расстояние известно..
Странные у Вас какие то задачки..) 
3  Разное / Говорилка / Re: Геометрия (задачки) : Январь 27, 2017, 13:26
Цитировать
Шо за система  Непонимающий
Ландау, Лифшиц 1 том..

 
Цитировать
Посчитаем тестовый пример (на бумажке)
Да, сорри, забыл условие проверить.. Теперь всё ок
Код
C++ (Qt)
bool BallsCollided( Ball & ball1, Ball & ball2 )
{
   QVector3D r0 = ball1.pos - ball2.pos;
   QVector3D u = ball1.speed - ball2.speed;
 
   float u2 = u.lengthSquared();
   float r0u = QVector3D::dotProduct(r0, u);
 
   float rho2 = r0.lengthSquared() - r0u*r0u/u2;
 
   return (rho2 < 4.0*Ball::radius * Ball::radius) & (r0u < 0.0f);
}
 

Цитировать
По поводу пересечения шариков: ну а почему не просто так
Это вообще что??  
Как я понял из условия задачи: В некоторый момент времени нам были даны координаты и скорости шаров.  Вопрос: Столкнутся ли они в будущем? Всё.
Та формула/функция, что я привёл однозначно на этот вопрос отвечает.)
Могу, конечно, её расшифровать/вывести..  

Ну и скорости после столкновения тоже легко вычисляются..
4  Разное / Говорилка / Re: Геометрия (задачки) : Январь 25, 2017, 17:45
Цитировать
20) Есть 2 шарика одинакового размера
Ну это просто решается в системе центра масс..
Код
C++ (Qt)
bool BallsCollided( Ball & ball1, Ball & ball2 )
{
   QVector3D r0 = ball1.pos - ball2.pos;
   QVector3D u = ball1.speed - ball2.speed;
 
   float u2 = u.lengthSquared();
   float r0u = QVector3D::dotProduct(r0, u);
 
   float rho2 = r0.lengthSquared() - r0u*r0u/u2;
 
   return (rho2 < 4*Ball::radius * Ball::radius);
}
 
5  Программирование / Алгоритмы / 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
Как по интегральной, усреднённой величине мы делаем вывод о том, что мы там чего то зацепили?

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

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

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


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

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

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

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

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


Страниц: [1] 2 3 ... 115
Страница сгенерирована за 0.171 секунд. Запросов: 23.