## Diff of /math.c[fa87ef] .. [476859]  Maximize  Restore

### Switch to side-by-side view

```--- a/math.c
+++ b/math.c
@@ -2541,7 +2541,6 @@
return 1;
}

-
int orthographic_sphere_tp( double x_dest,double  y_dest, double* x_src, double* y_src, void* params)
{
// params: double distance
@@ -2557,6 +2556,52 @@
*y_src = rho * sin( phi );
return 1;
}
+
+// the Thoby projection is an empirically found projection for the Nikkor 10.5 lens
+// rho = THOBY_K1_PARM * sin( theta  * THOBY_K2_PARM);
+
+int sphere_tp_thoby( double x_dest,double  y_dest, double* x_src, double* y_src, void* params)
+{
+  // params: double distance
+
+  register double phi, theta, rho;
+#define SCALE (((double*)params)[0])
+
+  rho = sqrt( x_dest*x_dest + y_dest*y_dest )/ SCALE;
+
+
+  theta = asin( rho/THOBY_K1_PARM) / THOBY_K2_PARM;
+  phi   = atan2( y_dest , x_dest );
+
+  *x_src = SCALE * theta * cos( phi );
+  *y_src = SCALE * theta * sin( phi );
+
+#undef SCALE
+
+  return 1;
+}
+
+
+int thoby_sphere_tp( double x_dest,double  y_dest, double* x_src, double* y_src, void* params)
+{
+  // params: double distance
+
+  register double rho, phi, theta;
+
+#define SCALE (((double*)params)[0])
+
+  theta = sqrt( x_dest * x_dest + y_dest * y_dest ) / SCALE;
+  phi   = atan2( y_dest , x_dest );
+
+  rho = THOBY_K1_PARM * sin( theta  * THOBY_K2_PARM );
+
+  *x_src = SCALE * rho * cos( phi );
+  *y_src = SCALE * rho * sin( phi );
+
+#undef SCALE
+  return 1;
+}
+

int shift_scale_rotate( double x_dest,double  y_dest, double* x_src, double* y_src, void* params){
// params: double shift_x, shift_y, scale, cos_phi, sin_phi
```