a = x3*x3 + y3*y3 + z3*z3;
b = -2*(x1*x3+y1*y3+z1*z3);
c = x1*x1 + y1*y1 + z1*z1 - v*v;
d = b^2-4*a*c;
// проверить, что d >= 0 - иначе первый вектор слишком далеко.
t1 = (-b - sqrt(d))/(2*a);
t2 = (-b + sqrt(d))/(2*a);
// выбрать минимальный неотрицательный t.
Можно ли их крутить, класть на бок, например? Много ли у вас коробок?