Doing Raytracer in Crystal

Hey @asterite, in reviewing your code you used abstract classes.
I found this forum thread about them, but am not clear why you used them.
Were they necessary (is there another way to do it?), or was it just easier using them. I’m trying to understand your code before I try to see if I can make it faster.