Так если знаете, то почему не проверяете, что ваши x_ и y_ лежат в пределах массива?
Например, при вызове cast_ray(5, 5, 0, 10)
, последняя проверяемая точка будет иметь координаты x_ == 5 и y_ == 15.
P.S. Хотя стоп, там вообще бред написан. При angle == 0 будет деление на ноль (причём, деление там вообще не нужно). Затем, в функцию передаётся угол в градусах (судя по диапазону 0:180, а функции sin и cos принимают радианы.