Почему приведение лучей Pygame DDA привязано к углам 0–90 градусов и не совпадает с границами ячеек? [дубликат]Python

Программы на Python
Ответить
Anonymous
 Почему приведение лучей Pygame DDA привязано к углам 0–90 градусов и не совпадает с границами ячеек? [дубликат]

Сообщение Anonymous »

Я пытаюсь добавить сверхбыстрое приведение лучей с помощью алгоритма DDA в плиточных мирах, используя DDA, в свой заклинатель лучей Pygame, но получаю странные результаты при попытке визуализировать путь луча.
Луч застрял под углом 0–90 градусов (поскольку raylengthx и raylengthy имеют только положительные значения), но при этом он не выровнен ни по каким границам ячеек.

Код: Выделить всё

            cellStepSizeX = 1000000 if round(dx,10) == 0 else math.sqrt(1+ (dy/dx) *  (dy/dx))
cellStepSizeY = 1000000 if round(dy, 10) == 0 else math.sqrt(1 + (dx/dy) * (dx/dy))

mapX = self.x // 32
mapY = self.y // 32

if dx < 0:
stepX = -1
rayLengthX = (self.x -mapX) * cellStepSizeX

else:
stepX = 1
rayLengthX = ((mapX +1) - self.x) * cellStepSizeX

if dy < 0:
stepY = -1
rayLengthY = (self.y - mapY)*cellStepSizeY
else:
stepY = 1
rayLengthY = ((mapY +1) - self.y) * cellStepSizeY

#collision = False
while distance < 200:
if rayLengthX < rayLengthY:
mapX += stepX
distance = rayLengthX
rayLengthX += cellStepSizeX
else:
mapY += stepY
distance = rayLengthY
rayLengthY += cellStepSizeY
[img1](https://i.sstatic.net/UDprZwZE.png)
[img2](https://i. sstatic.net/AJWTID48.png)
[img3](https://i.sstatic.net/5uqbZgHO.png)
[img4](https://i.sstatic.net/bLtx4xUr.png)
Вот несколько изображений, чтобы вы могли понять, о чем я говорю.Зеленая линия: движение луча/правильный угол луча
Синяя линия: луч алгоритма DDA из текущей позиции + длина луча
Красные линии: длины луча x и y разделены в соответствующих местах направления.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ligned-wit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»