I have a (non-invertible) function ak([u,v,w]) This takes a point on the surface of the unit octahedron (p: such that |u|+|v|+|w| = 1) and returns a point on the surface of the unit sphere. The function isn't perfect but the intention is to keep the distance between points authalic. I was thinking of using SciPy minimize to provide a numerical inverse, but I cannot wrap my head around it. input: spherical pt [x,y,z], output octahedral pts [u,v,w] such that ak([u,v,w])=[x,y,z] My function ak() is defined like this: def ak(p): # Convert point on octahedron onto the sphere. # Credit to Anders Kaseorg: https://math.stackexchange.com/questions/5016695/ # input: oct_pt is a Euclidean point on the surface of a unit octagon. # output: UVW on a unit sphere. a = 3.227806237143884260376580641604959964752197265625 # - vis. Kaseorg. p1 = (np.pi * p) / 2.0 tp1 = np.tan(p1) xu, xv, xw = tp1[0], tp1[1], tp1[2] u2, v2, w2 = xu ** 2, xv ** 2, xw ** 2 y0p = xu * (v2 + w2 + a * w2 * v2) ** 0.25 y1p = xv * (u2 + w2 + a * u2 * w2) ** 0.25 y2p = xw * (u2 + v2 + a * u2 * v2) ** 0.25 pv = np.array([y0p, y1p, y2p]) return pv / np.linalg.norm(pv, keepdims=True) This function is based on a post that I made on the Math StackExchange. Any hints? Continue reading...