a = vx*vx+vy*vy+vz*vz
b = 2*(vx*(x0-xs)+vy*(y0-ys)+vz*(z0-zs))
c = (x0-xs)*(x0-xs)+(y0-ys)*(y0-ys)+(z0-zs)*(z0-zs) - r*r
d = b*b-4*a*c.
if (t1 > 0) t = t1;
else t = t2;
if (t <= 0) решения_нет;
x = x0+t*vx
y = y0+t*vy
z = z0+t*vz
3 комментарий к моему вопросу
Каждый из троих выполняет разную работу и нужно что бы каждый из них побывал на разном виде работ.
По поводу идеи автора с удвоением времени. Может не сработать если период повтора не будет кратен двойке.
Так-то, если у вас set<> какой-нибудь, то можно сравнить *begin() и *rbegin() с искомым значением (С предварительной проверкой на пустоту, конечно). Если контейнер упорядочен, то все элементы будут между этими.