
just a note...
that i know of, the easiest/fastest way to calculate a disc intersection (which i recall from the book Photorealism and Ray Tracing in C) is to:
1. assuming the disc is infinitely flat, define it as a plane with a given normal and origin (or offset).
2. calculate the intersection between the ray and the disc's plane using the standard rayplane intersection method.
3. find the square of the distance from the point of intersection to the origin of the disc. if this result is less than the square of the radius of the disc, the ray intersects the disc.
of course, (3) can be done using the actual distance and actual radius (instead of the squares), but it's easier to just find (PQ)^2 (where P = disc origin and Q = intersection point).
optionally, an "inner" radius can also be used; an intersection occurs only where the [square of the distance from the point of planeintersection to the disc origin] is between the square of the disc outer radius and the disc inner radius. this allows for rendering of a disc with a hole in it (i.e. a flat toroid).
 algofoogle
