То, что вы описали в начала — обратная трассировка лучей. То, что вы описали далее — не трассировка лучей вовсе. Трассировка лучей оперирует лучами, поверхностями и их свойствами, у вас из этого нет ничего. И подход этот был зачат до трассировки лучей…
Впрочем, как его не называй, а реализация хорошая. Спасибо, было крайне интересно почитать.
А это уже алгебраические фракталы напоминает. Я понимаю аналогию с обратной трассировкой лучей (z-координата константа, а траектория не непрерывна), но если мы назовем этот подход трассировкой лучей, нам придется обозвать трассировкой и это:
for (int y = 0; y < height; y++)
for (int x = 0; x < width; x++)
drawPixel(x, y, abs(cos(x * y / 10000) * 255));
Дело в том, что у меня двойки всегда отрисовывались вертикально, и чтобы [2,2] не создавало линию, я объединял их в [4]. Результат был таким же, как в оригинале.
Здесь же двойки рисуются горизонтально, поэтому и выглядит иначе, хотя на мой взгляд это мелочи.
Спасибо автору. Статья отличная, скорость работы потрясающая :)
Мой код кажется чуть логичнее, так как я никакое число не обрабатываю специально при рендеринге (двойки в четвёрки склеены заранее). У вас же для двоек отдельная ветка в отрисовке. Конечно, несложно и у меня добавить аналогичную ветку.
По идее задача для нуля не определена: она имеет смысл только для натуральных чисел. Если хотите, можно выдавать сообщение, что входные данные некорректны :-)
Визуализация характеристической функции