Pull to refresh

Comments 19

То, что вы описали в начала — обратная трассировка лучей. То, что вы описали далее — не трассировка лучей вовсе. Трассировка лучей оперирует лучами, поверхностями и их свойствами, у вас из этого нет ничего. И подход этот был зачат до трассировки лучей…

Впрочем, как его не называй, а реализация хорошая. Спасибо, было крайне интересно почитать.
Да, ассоциация, может, не самая удачная, но мне пришла в голову именно такая :-)
Возможно, такое название будет удачнее.
Это трассировка. Только она происходит в не совсем привычном пространстве (z-координата дискретна, и траектория состоит из довольно странных точек).

Думаю, что вместо того, чтобы считать секторы и центр нужной окружности, достаточно было бы вычислить что-то вроде

z[n+1]=(pow(z[n], factors[n]) — 1) * b, где b — какое-то число, большее 1, а z[0]=x+i*y.

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

Спасибо за отзыв!
С 1 была бага в стыренной мной функции факторизации: она должна возвращать пустой массив, а не [1]. Да, чужой код тоже надо тестировать. Пофиксал.
Попробовал 31415926=8263 * 1901 * 2, а фигура — круг.
Идеальный мир!
UFO just landed and posted this here
Чем более многогранна личность, тем ближе она к круглому идиоту
Добавьте исключительный случай в нуле?
По идее задача для нуля не определена: она имеет смысл только для натуральных чисел. Если хотите, можно выдавать сообщение, что входные данные некорректны :-)
Я бы радовался пасхалке в виде моноскромной монохромной девушки.
Sign up to leave a comment.

Articles

Change theme settings