Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Июль 25, 2010, 18:48



Название: Lazy calculation
Отправлено: Igors от Июль 25, 2010, 18:48
Добрый день

Есть "облако" точек в пространстве. Каждая точка, кроме своих координат (x. y. z) имеет также набор дополнительных данных (нормаль к поверхности и.т.п). Задача посчитать значение освещенности в каждой точке. Расписывать все детали расчета нет никакого смысла - это глухая специфика. Дело в другом: ф-ция освещенности меняется медленно так что в 90% случаев нет никакой необходимости считать каждую точку (что весьма накладно) - лучше посчитать некоторые (базовые) точки и интерполировать остальные. Ведущие теоретики (Гриша Вард и др.) предложили это много лет назад. Lazy выглядит красиво:

Приступаем к расчету точки

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

Что Вы об этом думаете?

Спасибо


Название: Re: Lazy calculation
Отправлено: lit-uriy от Июль 25, 2010, 21:53
Igors, если не секрет, ты над каким ПО работаешь?  Для каких оно целей?


Название: Re: Lazy calculation
Отправлено: niXman от Июль 26, 2010, 04:54
Для каких оно целей?
для повышения самооценки(в первую очередь). т.е. чел с его уровнем знаний в области с++, вряд ли что-то рациональное сможет написать ;D
к примеру: http://www.prog.org.ru/index.php?topic=14210.msg92996#msg92996  ;D


Название: Re: Lazy calculation
Отправлено: Igors от Июль 26, 2010, 10:53
Igors, если не секрет, ты над каким ПО работаешь?  Для каких оно целей?
3D sofware render (т.е. без OpenGL  :))


Название: Re: Lazy calculation
Отправлено: Igors от Июль 26, 2010, 11:55
для повышения самооценки(в первую очередь). т.е. чел с его уровнем знаний в области с++, вряд ли что-то рациональное сможет написать ;D
Эта задача прекрасно ложится под темплейты, итераторы, паттерны и.т.п. - все то что Вы якобы знаете/владеете. Вот и покажите на деле силу богатырскую вместо того чтобы засорять форум детскими выпадами  :)


Название: Re: Lazy calculation
Отправлено: ufna от Июль 26, 2010, 21:56
3D sofware render (т.е. без OpenGL  :))

А книгу такую толстую, красную, типо "разработка 3д игр", автора не помню, не читал? Там такие штуки насколько мне память не изменяет детально были прописаны, я в 2004м этим же маялся помню.


Название: Re: Lazy calculation
Отправлено: Igors от Июль 26, 2010, 22:09
А книгу такую толстую, красную, типо "разработка 3д игр", автора не помню, не читал? Там такие штуки насколько мне память не изменяет детально были прописаны, я в 2004м этим же маялся помню.
Ну согласитесь: "толстая красная книга" уж слишком расплывчатый ориентир  :) И потом - задача совсем не для игры, ни о каких fps речи не идет. Такой расчет может длиться секунды и минуты, это нормально


Название: Re: Lazy calculation
Отправлено: ufna от Июль 26, 2010, 22:16
книга там так называется, т.к. анимация еще рассмотрена )) остальные кучу страниц про освещение и визуализацию, имнно софтварную. Если "большая красная" ничего не сказала, значит не читали, счас поищу как называется (под рукой нет :( )


Название: Re: Lazy calculation
Отправлено: Igors от Июль 28, 2010, 18:05
Пацаны, я никого не хочу подначить/обидеть и уважаю правило форума "запрещается провоцировать..". Но, блин, обидно

Код:
Ты пытаешься.. 
Код:
Посмотри на..
Код:
это зачет..
Код:
Все равно придешь к этому..

О как Вы смелы когда прочитали решение в Assistant  :) Куда же все девается когда есть задача которую Вы не видели? Почему общие прынцыпы ООП перестают работать? Я написал этот алгоритм 2 месяца назад - но я не удовлетворен ни квачеством ни скоростью. Задача весьма сложна - это типично для вещей которые "формулируются очень просто". Но первые несколько ходов очевидны и обязательны. Так "куда идем - в Москву или в Монголию?". Что есть программирование - творческий (не побоюсь этого слова) поиск решений или запоминание кучи дурацких правил (a la наша малышь),?

Может сегодня "не мой день" - не буду иметь претензий если модераторы удалят этот  пост


Название: Re: Lazy calculation
Отправлено: m_ax от Июль 28, 2010, 20:38
Ого)) Кажется я чего то пропустил)

У меня была похожая задача. Тоже имелось целое облако точек и нужно было посчитать амплитуду в каждой точке (комплексная величина). Более того, это облако точек должно было быть случайным, т.е. нужно было проиграть оч много случайных их распределений и затем усреднить полученную амплитуду. Короче, в итоге я забил на эту затею) Проще оказалось воспользоваться диаграммным методом)

То, что освещённость у Вас меняется плавно - как я понимаю, следствие гладкости поверхности, на которой эти точки лежат. А как вы, кстати, освещённость высчитываете? И чем плох тот алгоритм, который предложили Гриша Вард и др.?   


Название: Re: Lazy calculation
Отправлено: whirlwind от Июль 29, 2010, 12:34
"толстая красная книга"

очевидно OpenGL RedBook http://www.opengl.org/documentation/red_book/


Название: Re: Lazy calculation
Отправлено: Igors от Август 01, 2010, 22:34
То, что освещённость у Вас меняется плавно - как я понимаю, следствие гладкости поверхности, на которой эти точки лежат.
Совершенно верно, хотя этот критерий не единственный. Проще говоря есть ф-ция которая принимает 2 точки и возвращает значение от 0 до 1, так что можно судить насколько точки "совместимы" (можно ли интерполировать их)

А как вы, кстати, освещённость высчитываете?
Это долгая песня и было бы некорректно грузить спецификой. Скажем проще: точка имеет все данные необходимые для расчета освещенности и расчет одной точки независим от другой. 

И чем плох тот алгоритм, который предложили Гриша Вард и др.?   
Они предлагали идею/концепцию, а не конкретный алгоритм