Удобно ввести новую систему координат и потом откладывать ее базисные векторы нужное количество раз.
Эта система будет иметь центр на радиусе сферы к центру оружности и лежать на "хорде" - плоскости в которой лежит многоугольник. В ней ваш многоугольник будет просто на плоскости.
Из простейшей геметрии вы знаете, что этот центр координат будет на расстоянии
sqrt(R^2-r^2)
от центра сферы - так радиус окружности на сфере будет r.
Первый базисный вектор будет вдоль радиуса из центра сферы к центру многоугольника и координата там будет всегда 0.
Теперь вам надо найти еще какой-то вектор в плоскости многоугольника, а третий вектор потом найдете через векторное произведение. Хорошо бы этот второй вектор взять на север, тогда ясно куда класть первую точку по условию. Если только центр окружности не лежит строго на свере, то можно взять и спроецировать на плоскость вертикальный вектор (0, 0, 1) и все (а в противном случае проецируйте, допустим (1, 0, 0). А дальше останется только взять формулы для многоугольника на плоскости
x = cos(2*pi/n*k)*r y = sin(2*pi/n*k)*r
, ну и не забыть перевести все в обычную систему координат.
Итак, пусть xo,yo,zo - точка на сфере, где лежит центр. xo и yo не нули одновременно. Еще даны R, r и n.
Центр новых координат:
L = sqrt(R^2 - r^2)
x1 = xo/R*L
y1 = yo/R*L
z1 = zo/R*L
Первый базисный вектор:
e1 = (x0, y0, z0) / R
Второй базисный вектор (нормализованный (0,0,1) - (0,0,1)*e1):
e2 = (-x0*z0/R/sqrt(R^2- z0^2), -y0*z0/R/sqrt(R^2- z0^2), sqrt(R^2-z0^2)/R)
третий базисный ветор, найдите сами через векторное произведение.
А дальше координаты k-ой точки:
p = (x1,y1,z1) +e2*cos(2*pi/n*k)*r+e3*sin(2*pi/n*k)