Если сравнивать формулу
X = (R + r cos (2 pv)) cos (2 pu)
Y = r sin (2 pv)
Z = (R + r cos (2 pv)) sin (2 pu)
с кодом
double x = (1 + 0.1 * Math.Cos(s * TWOPI / numc)) * Math.Cos(t * TWOPI / numt);
double y = (1 + 0.1 * Math.Cos(s * TWOPI / numc)) * Math.Sin(t * TWOPI / numt);
double z = 0.1 * Math.Sin(s * TWOPI / numc);
Ясно, что X = x, Y = z, Z = y, R = 1, r = 0.1, 2 pv = s * TWOPI / numc
и 2 pu = t * TWOPI / numt
. Тогда
v = arccos (Y/R)/2p
u = [arccos ((X/(R + r*cos(2 pv))]2p
1012 * дает *
v = arcos (z/1)/TWOPI
u = [arcos ((x/(1 + 0.1*cos(s * TWOPI / numc)]/TWOPI
РЕДАКТИРОВАТЬ: Честно говоря, я не пытался понять формулу ... Читая ваш код, я думаю, что это должно сработать:
u = (i + k) / (float)numc;
v = t / (float)numt;
(Возможно, вам придется поменять местами вас и v.)