I am trying to make a very basic ray-tracing simulation of lens.
- A single ray origin trigger light photons of a supposed single frequency in all directions. (I do not consider chromatic aberration).
- Some lens emulated as a couple of spherical superficies with refraction index.
After detecting an intersection between a ray and the closest lens, I get the normal at this point to the lens and apply the following refraction formula wikipedia:
$$\frac{sin(\theta_1)}{sin(\theta_2)} = \frac{n_2}{n_1}$$
The formula is applied twice: a first time when entering the lens with (e.g. index $2.0$) and a second time when exiting the lens with the inverse index (e.g: $0.5$).
I checked the results numerically, but the rays do not focus:
As you may observe, the focus "point" is closer for rays crossing the outer part of the lens, while is further for rays crossing the lens in the middle.
Some suppositions:
- The formula is too simplistic for achieving a correct focus point
- Lens are not exactly spherical
- I do some mistake somewhere
**Why are those rays not converging to the same focus point? **
Example of calculation:
- Ray: Origin=$(400,300)$ Direction=$(0,-1) $
- Lens: Circle center=$(400-50\sqrt{2}, 100)$ Radius=$100$
- Intersection: Position=$(400, 170.7107..)$ Normal=$(\sqrt{2}, \sqrt{2})$
- Refracted ray inside the lens: Origin=$(400,170.7107...)$ Direction=$(-0.41144, -0.91144)$ $\theta_1=-45$ $\theta_2=-20.7048$ $\frac{n_1}{n_2}=2$
- Intersection2: Position=$(323.027, 0.19627)$ Normal=$(0.062622, 0.99804)$
- Refracted ray outside the lens: Origin$(323.027, 0.19627)$, Direction=$(-0.75, -0.66144)$ $\theta_1=20.7048$ $\theta_2=45$ $\frac{n_1}{n_2}=0.5$