Is there a formula or algorithm with which one can interpolate the points of a triangle that lies on the unit sphere in a spherical manner?
Let me elaborate:
If you want to interpolate two points on a unit sphere spherical, you use slerp.
If you want to interpolate between points of a planar triangle, you probably want to use barycentric coordinates.
My overall goal is to create points within the triangle of the sphere which are evenly positioned, in regards to their angle, if possible.
In particular, I want to do create a geodesic polyhedron (based on an icosahedron) in which the triangles on the surface of the approximated sphere are as evenly spread as possible, without the points closer to an original corner of the icosahedron having smaller distances to each other than those in the middle.
My approach do to so so far was to interpolate spherical on two of the edges using slerp, and then between the points created in this manner, but a more direct approach over something like barycentric coordinates would be appreciated.
I read further into Slerp and found out that it is not associative, which makes it a bad choice for nested application, as the order in which it is applied matters.
Further search into the topic yielded the paper Spherical Averages and Applications to Spherical Splines and Interpolation by Samuel R. Buss and Jay P. Fillmore.
The paper presents the concept of a spherical centroid.
For given points $p_1,...,p_n \in S^d$, given weights $w_1,...,w_n$ with $w_i \geq 0$ and $\sum_i w_i = 1$, and the spherical distance $d_S(\cdot,\cdot)$ (arc length of the shortest path between two points on the unit sphere, equals their angle), the spherical centroid is defined as
$argmin_{C \in S^d} \sum_i w_i \cdot d_S(C, p_i)^2$
Afther that, they state a proof that this is uniquely defined if all $p_i$ lie within a common hemisphere.
If we use this with three points, the weights work pretty much like barycentric coordinates, just what I wanted.
The paper also contains algorithms on how to compute this and I successfully implemented them in C++.