Луа лучевая аномалия - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть новый эффективный код радиовещания:

vectorX, vectorY = math.cos(r * math.pi/180), math.sin(r * math.pi/180)

wallDistanceX, wallDistanceY = v[3] - v[1], v[4] - v[2]
wallParallelX, wallParallelY = -wallDistanceY, wallDistanceX
rayX, rayY = v[1] - cam.x, v[2] - cam.y

Distance = (
    (rayX * wallParallelX) + (rayY * wallParallelY))/(
    (vectorX * wallParallelX) + (vectorY * wallParallelY)
)
if (
    (math.min(v[1],v[3]) <= (cam.x + (Distance * vectorX)) and math.max(v[1],v[3]) >= (cam.x + (Distance * vectorX))) and
        (math.min(v[2],v[4]) <= (cam.y + (Distance * vectorY)) and math.max(v[2],v[4]) >= (cam.y + (Distance * vectorY)))
) then
    table.insert(possibles, Distance)
else
    table.insert(possibles, 0)
end

Этот фрагмент кода был преобразован в Lua из ответа этого сообщения, но когда лучи нарисованы, они выглядят разбитыми, как это:

anomalic rays

Я выполнил отладку и так, и получается, что, когда луч проверяется на пересечение линии, возвращается расстояние 0 (возвращаемое расстояние 0 означает, что луч предположительно не пересекся со стеной). Как видите, есть стена, и миникарта в верхнем левом углу показывает именно это.

Есть идеи о том, почему луч не обнаруживается при его пересечении? Если вы не понимаете что-то, пожалуйста, спросите.

r = angle for ray

v = an index of the list {}; v[i] is either the x1,y1,x2,y2 of the line

...