На главную
Программы
Динамические | Полезные

Статические программы

Обратная трассировка

Галерея 3D картинок

Однажды на первом курсе я случайно присутствовал на занятии по компьютерной графике у третьего курса. Именно тогда они смотрели программу, демонстрирующую метод обратной трассировки. На экране постепенно прорисовывались трехмерные объекты: красные конусы, сплюснутый и растянутый эллипсоиды вращения, трубка и другие. Прорисовывалось не очень быстро, но все было очень объемно. Меня это очень впечатлило и самому захотелось написать такую программу.

Долго выводил всякие формулы. Пригодился модуль VESA - для качественной картинки нужно много цветов. Реализовал все, что тогда знал, и до чего смог додуматься сам.

Цепочка

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

Несомненно, больших успехов в изучении и реализации метода обратной трассировки достиг Павел Коколемин.

Скачать (42 Кб)

Линии уровня

Здесь можно посмотреть графики 12 функций

Трехмерные графики можно рисовать линиями уровня. Получаются интересные узоры.

Еще более интересные картинки получаются, если раскрасить уровни оттенками цвета: чем выше, тем светлее, чем ниже - тем темнее. Такой метод позволяет лучше представить вид графика. Кроме того, получаются и просто сами по себе красивые картинки.

Если уменьшить расстояние между соседними уровнями, получается гладкое изображение. Совершенно другой эффект.

Например, так выглядит график функций z = sin(xy) + sin(x) + sin(y):

z = sin(x*y) + sin(x) + sin(y) z = sin(x*y) + sin(x) + sin(y) z = sin(x*y) + sin(x) + sin(y)

Скачать (21 Кб)

Кривая дракона

На первом курсе у меня было задание нарисовать фрактал "Кривая дракона". Привожу кривые порядка 10 и 20.

Кривая дракона порядка 10 Кривая дракона порядка 20

Скачать (28 Кб)


© Ярослав Музыкантов muzykantov@mail.ru