Поскольку результаты поисков по вопросу неудовлетворительны, то решил-таки задать вопрос.
Требуется эффективный алгоритм рисования чего-то, похожего на звёздные туманности
Крайне желательно, чтобы рендер мог выполняться в реальном времени и почти настоятельн
требуется, чтобы алгоритм был стабильным (выдавал одну и ту же картину при неизменны
входных параметрах).
В ходе поисков я обнаружил фрактальный алгоритм Buddhabrot, но он довольно медленный
насколько я могу судить по той реализации, что я увидел (http://cabin.users.geeky.net/classes/buddhabrot.htm
запустить и подождать около минуты)
UPD: я выставил теги не совсем верно (поправьте, если кто знает, какие тэги здес
более уместны). Не обязательна реализация на яве. Главное - понять идею, а перенест
на J2D я уж как-нибудь сумею.
UDP2: без сомнения идея с зарядами дала результаты. Пока они незначительные, но уж
кое что.. немного поправить распределение зарядов и цветовую гамму + звёзды + сглаживани
шума вместо грубого шума и будет то что надо. На этом основании закрываю вопрос и помеча
ответ как правильный. Возможно также попробую наложить спирали на эту сцену: вмест
со звёздами должно получиться неплохо.
UPD
Итак, скрещивание спиралей с точечными зарядами удалось.. теперь надо наложить облакообразны
шум (в чём мне очень помогла статья Simple Clouds Part 1)
UPD 21 сентября
И вот очередной апдейт для заинтересованных. Думаю я уже близок к завершению.
Ответы
Ответ 1
Простейшим методом реализации разнообразных «случайных» текстур есть метод Кена Перлина
названный в его честь. В этом методе генерируется несколько текстур «октав» и слага
их вместе мы получаем довольно интересную текстуру, вид которой зависят от нескольки
параметров. Тут подробнее
Я пробовал, медленно генерирует, и нужно долго подбирать коэффициенты для нормальног
вида.
Попробуйте другой метод: расположить несколько точек (зарядов), а цвет туманност
задать как потенциал или эл.поле от этих зарядов f = k/r или E = k/(r^2) не забыва
про суперпозицию.
Ответ 2
Насчет функции генерации облака вокруг центра. Если взять приближение (не четки
мат функции). Например, первый rand дает значение от 0 до 1 (дробное).
Разобьем значение 0 - 1 на части:
0 - 0,5 - вероятность 50%, значит расстояние должно быть маленькое, максимум 10 (можн
от 0 до 10)
0,5 - 0,7 - вероятность меньше, расстояние максимум 100 (можно от 10 до 100)
0,7 - 0,8 - вероятность еще меньше, расстояние максимум 1000 (можно от 100 до 1000)
Потом применяем найденное максимальное расстояние к рандому нахождения координат
(второй и третий ранд) = (x,y)
Тут можете сами задавать кратность и вероятность 'рисовать' какие угодно функци
распределения - я не специалист как они выглядят более естественно. Главное алгорит
- если будете вызывать напрямую функцию генерации точек, то они могут быть медленными
а тут сами рулите.
Кстати насчет функций - вероятно, есть какие-то алгоритмы: задаете текущий srand
задаете центр распределения, вызываете функцию с предопределенными параметрами и он
вам генерирует точки, например, по нормальному закону или по экспоненте (какие-то таки
функции я видел в математических пакетах, сразу не вспомню)
Комментариев нет:
Отправить комментарий