A point mass bends light exactly like the shader-based 3D version, but here the lens equation is solved algebraically instead of ray-marched per pixel. In dimensionless form (all angles in units of the Einstein radius θE), a source at offset u produces two images at:
θ_E = sqrt( 4GM/c² · D_LS / (D_L·D_S) )
θ± = ( u ± sqrt(u² + 4) ) / 2 (units of θ_E)
A± = (u²+2)/(2u·sqrt(u²+4)) ± 1/2
A_total = |A+| + |A−|
θ+ always lies on the same side as the source (outside the ring), θ− is the fainter, demagnified image on the opposite side. As u → 0 the two images merge into the full Einstein ring and the magnification diverges — drag the source toward the lens centre to see it.
- Drag the source (yellow dot) anywhere on the canvas — the images and every readout update instantly from the equations above, no lookup tables.
- Lens mass / distances — set the real physical Einstein radius θ_E (from stellar microlensing at ~mas to galaxy-cluster lensing at multiple arcsec); the *layout* on screen is always drawn in units of θ_E so it stays readable at every scale.
- Ray paths toggle draws the two bent light paths from the true source direction to the observer through each image.