Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2012, 16:07   #11
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Stilet
Цитата:
Я правильно понимаю - допустим в координате 0,0 есть серый пиксель скажем процентов 20% в темную сторону.
Соответственно есть некий коэффициент-критерий, который говорит о том куда темнота этого пикселя дотягивается, фактически просчитывается "тень" пикселя.
Да это верно.

Цитата:
Тогда ты заранее знаешь что в координате скажем 10,10 затухание будет по некоторому закону, скажем по логарифму равно нулю - т.е. тень пикселя эту координату уже не может накрывать. Соответственно тебе относительно этого пикселя нужно просчитывать не всю матрицу а только ту, на которую падает тень.
Нет. Влияние от каждого распространяется на все.
BleStaR вне форума Ответить с цитированием
Старый 06.09.2012, 16:19   #12
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
B2 = 2 * pow(xyz2, 1.5);
Rad = sqrt(xyz2);
Надо проверять вообще, но, мне кажется, так может быть немного быстрее:
Код:
Rad = sqrt(xyz2);
B2 = 2 * xyz2 * xyz2 / Rad;
Или, может быть, логичнее
Код:
sqrtxyz2 = sqrt(xyz2);
B2 = 2 * xyz2 * xyz2 / sqrtxyz2;
Rad = sqrtxyz2;
Somebody вне форума Ответить с цитированием
Старый 06.09.2012, 17:21   #13
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Somebody
Цитата:
Надо проверять вообще, но, мне кажется, так может быть немного быстрее:
Код:
Rad = sqrt(xyz2);
B2 = 2 * xyz2 * xyz2 / Rad;
не знаю как насчет производительности, но мне нравится маневр... только там не деление а умножение будет
Код:
Rad = sqrt(xyz2);
B2 = 2 * xyz2 * Rad;
BleStaR вне форума Ответить с цитированием
Старый 06.09.2012, 17:26   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нет. Влияние от каждого распространяется на все.
У меня такое чувство, будто именно для такой работенки разработана CUDA...
может порыть в ее сторону?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2012, 17:28   #15
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Vago
Цитата:
Кстати, в самом внутреннем цикле (по t) я могу вынести за цикл домножение на mConstZnak (ну, теперь с к-том 5000, конечно) или мне только так кажется?

И к dz цикл по t, по-моему, тоже инвариантен?..
Верно)) произведение dz * mConstZnak можно вынести из цикла (только умножать их на 5000 не надо - вынос константы из под знака суммы)
BleStaR вне форума Ответить с цитированием
Старый 06.09.2012, 17:33   #16
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

Цитата:
У меня такое чувство, будто именно для такой работенки разработана CUDA...
может порыть в ее сторону?
думаю что в эту сторону рыть не надо, ибо прога будет выполнятся на кластере.
BleStaR вне форума Ответить с цитированием
Старый 06.09.2012, 17:35   #17
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

evg_m
внес в программу предложенные тобой в 9-м посте маневры (вынос условия с u, добавление доп. массивов со значениями проверок)
BleStaR вне форума Ответить с цитированием
Старый 06.09.2012, 17:57   #18
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

не заметил, уже было
f.hump вне форума Ответить с цитированием
Старый 06.09.2012, 19:57   #19
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Сообщение от BleStaR Посмотреть сообщение
evg_m
внес в программу предложенные тобой в 9-м посте маневры (вынос условия с u, добавление доп. массивов со значениями проверок)
ну и как результаты, улучшения заметны?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.09.2012, 21:50   #20
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Пока что самый дельный совет подал evg_m. Начинку циклов по t можно без труда сделать инвариантной относительно значений I[][]. Тогда она выносится в начало и, в результате её выполнения MxN (кажется) раз, строится табличка зависимостей "влияния от расстояния", а в самом этом внутреннем цикле, в зависимости от расстояний, выдёргиваем из таблички значение и домножаем на -I[p][q].

Но лично я на формулы всё же взглянул бы. В чём физический смысл вот этих проверок вида
Код:
   I[p][q]!= I[p][q+1]
? В чём физическая разница влияния на эл-т I[0][0] его окружения вот в этом случае
Код:
  1 254 255
254 254 255
255 255 255
и в этом?
Код:
  1 255 255
255 255 255
255 255 255
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода LatuSerge Общие вопросы Delphi 10 27.12.2011 01:51
Оптимизация кода в си dampirik Помощь студентам 4 07.07.2009 11:30
Оптимизация кода nusik Общие вопросы Delphi 2 21.05.2009 17:55
Оптимизация кода Terran Общие вопросы Delphi 6 01.11.2008 16:57
Оптимизация кода [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 20.08.2008 15:00