это муар между регулярной пиксельной сеткой и рисуемыми по некруглым координатам шагами ваших лучей. в фаерфоксе он точно так же есть.
рейкастинг делается в обратную сторону. нужно идти по пикселам картинки и проверять не заслоняет ли конкретно этому пикселу какой-нибудь объект источник света.
вот, добавил вам первый же нагуглённый метод определения пересечений (отсюда
https://stackoverflow.com/questions/99353/how-to-t... ):
зы. код у вас ужасный, не потому что "на хтмл", а потому что половина переменных не объявлена и попадает в глобальный контекст, плюс вы пытаетесь рисовать каждую точку отдельным прямоугольником, да ещё и между пикселов, размеры картинок не совпадают, куски рисуются в разное время, и так далее...