Vale deixar claro que nos baseamos nesse tutorial
https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/ray-sphere-intersection
E que por isso talvez tenha certa similaridade com o código em C++ dele
com as adaptações que precisamos fazer pra rodar em python e algumas