Return to Computer Vision Notebooks

Ray-Sphere Intersection



Implementation of ray-sphere intersection algorithm.

Primitives


The first thing is to define the ray origin $O$ and direction $\large ê$, where the unit vector $\large ê = \frac{\vec{e}}{\parallel \vec{e} \parallel}$.

image 01

Next step is to define the sphere/circle center $C_s$ and radius $\large r$.

image 02

Intersection


To find the ray intersection, the next step is define the oriented segment $\overline{OC} = Cs - O$. image 03

Next step, we need to find the parameter $\large t$ which will parametrize the ray segment and find the intersections from the origin. The value $\large t$ can be found by projecting the vetor $\vec{OC}$ on the versor $\large ê$. The projection of a vector $\large \vec{a}$ on a $\large \vec{b}$ can be defined as the geometric representation of dot product:

$$ \large a_1 = \parallel a \parallel \cos{\theta} = a \cdot \hat{b} = a \cdot \frac{\vec{b}}{\parallel \vec{b} \parallel} $$

image 04

Having the parameter $\large t$, we can finally define the segment which will give us the point $P_e$ projected from center of the sphere on the ray direction. Applying the concept of parametrized line, we can define:

$$ \large P_e = O + t \cdot \hat{e} $$

Having this point, we can find the distance between $C_s$ and $P_e$ with ${\parallel P_e - C_s \parallel}_2$.

image 05

Notice that now we have the distance $\large d$ so we can make some assumptions:

image 06

Now we have all the necessary to calculate the intersection positions using the pythagorean theorem se we can have the value $\large i$ and define the positions based on the parametrized line from origin.

$$ \large \begin{aligned} P_s^1 & = O + \hat{e} \cdot (t - i) \\ P_s^2 & = O + \hat{e} \cdot (t + i) \end{aligned} $$

image 07

Example


3D Intersection


Apply same model for each pixel of an image plane as the origin and the ray direction is based on the perspective camera model:

image 07