- As the document says, >`Compile[{{x1,t1,n1},…},expr]` assumes that `xi` is a rank `ni` array of objects, each of a type that matches `ti`. Hence, `{xyz,_Real,1}` means `xyz` is a rank 1 array of "real numbers". Since `xyz` is a vector, `xyz[[1]]` means the first component of `xyz`. Therefore, if `xyz={2,4,3}`, then `xyz[[1]]=2`. - The `expr` in `Compile[{{x1,t1,n1},…},expr]` is given by the block of `Module`, a simple example of which for seeing how it works could be f=Module[{r=x,theta=y},{r,theta,r+theta}]; - Here is how the function really works. Given $x=(x_1,x_2,x_3)$ and $y=(y_1,y_2,y_3)$ in $\mathbb{R}^3$, the output of the function is $$ \bigg(\frac{r(1+x_3)}{1+x_3-y_3}\cos(\theta+\pi)+x_1, \frac{r(1+x_3)}{1+x_3-y_3}\sin(\theta+\pi)+x_2,0\bigg) $$ where $$ r:=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2},\quad \theta:=\arctan\frac{x_2-y_2}{x_1-y_1}. $$ The coordinate of the center of the sphere $S$ is given by $x=(x_1,x_2,x_3)$ and the radius of the sphere is $1$. This makes sense since the output of the function is of the form $(R\cos\psi+x_1,R\sin\psi+x_2,0)$, which implies that $x_1,x_2$ are the first two coordinates of the center of the sphere. On the other hand, $y=(y_1,y_2,y_3)$ is the coordinate of a point on the sphere. The output of the function gives the coordinate of the "sterographic projection" of $y$ (the intersection of the line (which goes through $y$ and the north pole of the sphere) with the complex plane). When $x=(0,0,0),$ the function coincides with [the one defined in Wikipedia][1]. --- One needs to be careful of the definition $\theta$ since in Mathematica, `ArcTan[x,y]` is different from the function $\arctan\frac{y}{x}$. For instance one has in Mathematica `ArcTan[1,1]`=$\frac{\pi}{4}$ and `ArcTan[-1,-1]`=$\frac{-3\pi}{4}$. This is why $\theta+\pi$ instead of $\theta$ is used in the output of the function. For the sake of a *function*, one could define $\theta$ as the angle of the vector $(y_1-x_1,y_2-x_2,0)$ with the $X_1$-axis and replace $\theta+\pi$ with $\theta$ in the output of the function. In the code, one could replace `theta = ArcTan[(xyz[[1]] - XYZ[[1]]), (xyz[[2]] - XYZ[[2]])]` with `theta = ArcTan[(XYZ[[1]] - xyz[[1]]), (XYZ[[2]] - xyz[[2]])]` and `theta + Pi` in the `Cos` and `Sin` functions with `theta`. [1]: https://en.wikipedia.org/wiki/Stereographic_projection#Definition