Я пытаюсь реализовать алгоритм, описанный в этой статье, используемый для пересечения сетчатых ячеек по следующей прямой, что полезно для трассировки лучей:
http://www.cse.yorku.ca/~amana/research/grid.pdf
В статье описывается алгоритм как две части: инициализация и итеративный обход. Я могу игнорировать итеративную часть обхода, но мне трудно понять, как вычисляются некоторые из переменных в части инициализации.
Мне нужна помощь, инициализирующая tMaxX
, tMaxY
, tDeltaX
и tDeltaY
. Их процедура инициализации объясняется следующим образом:
Далее, мы определяем значение t, при котором луч пересекает первый вертикальной границы вокселя и сохранить его в переменной tMaxX. Мы выполняем аналогичное вычисление по y и сохранение результата в tMaxY. Минимум эти два значения будут указывать, сколько мы можем перемещаться вдоль луча и все еще остаются в текущем вокселе.
Наконец, мы вычисляем tDeltaX и tDeltaY. TDeltaX показывает, насколько далеко вдоль луча мы должны двигаться (в единицах t) для горизонтальной компонент такого движения, равный ширине воксела. По аналогии, хранить в tDeltaY количество движения вдоль луча, которое имеет вертикальная составляющая, равная высоте воксела.
Я не могу вывести код, который мне нужен, из приведенного выше английского описания. Может ли кто-нибудь перевести его на выражение математики/псевдокода для меня?