vec_t = left.end - left.start;
vec_k = right.end - right.start;
r = right.start - left.start;
d = vec_t ⋅ vec_k;
if (d ≃ 0.0)
return; // параллельны
d_t = r ⋅ vec_k;
d_k = r ⋅ vec_t;
t = d_t / d; // параметр на одном отрезке ∈ [0, 1]
k = d_k / d; // на втором отрезке ∈ [0, 1]
if (t ∈ [0, 1] ∧ k ∈ [0, 1])
pt = left.start + t ⋅ vec_t = right.start + k ⋅ vec_k;