0
$\begingroup$

I've been trying to get the intersection point of 2 3D lines (in general, so i can code an algorithm) using the following equations:

$$ x_0 + k_0 a_0 = x_1 + k_1 a_1 \tag{1}$$

$$ y_0 + k_0 b_0 = y_1 + k_1 b_1 \tag{2}$$

$$ z_0 + k_0 c_0 = z_1 + k_1 c_1 \tag{3}$$

where $x,y,z$ are point coordinates and $a,b,c$ direction vector coordinates.

I think the idea is to get $k_0$ or $k_1$ so I can get the point from the line ($l_0$ if i use $k_0$, $l_1$ otherwise) using it's parametric equation.

I've made some tests and if I use equations $(1)$ and $(2)$ I get different results that if I use $(2)$ and $(3)$, so i think i'm doing something wrong...

From $(1)$: $$ k_0 = \frac{x_1-x_0 + k_1a_1}{a_0} \tag{4}$$

from $(2)$: $$ k_1 = \frac{y_0-y_1 + k_0b_0}{b_1} \tag{5}$$

from $(4)$ & $(5)$: $$k_1 = \frac{a_0 (y_0 - y_1) + b_0 (x_1 - x_0)}{a_0 b_1 - b_0 a_1} \tag{6}$$

And from $(1)$ & $(3)$: $$k_1 = \frac{a_0 (z_0 - z_1) + c_0 (x_1 - x_0)}{a_0 c_1 - c_0 a_1} \tag{7}$$

I don't know why, but $(6)$ & $(7)$ get different results for $k_1$...

I'm not controlling divisions by zero because C# returns NaN ($0/0$), -Infinity ($-x/0$), +Infinity ($x/0$) when needed, so I assume that if there is no intersection there would be some division by zero or something like that, right?

Any idea of whats wrong?

Thanks a lot!!

$\endgroup$
1
$\begingroup$

The problem is quite simplyy that if you take 2 lines in a 3D space they usually do not intersect (think about it!). So it's perfectly normal to get different results for $k_1$ : it simply means that your lines are not coplanar (you will only get a divide by zero error if they happen to be parallel).

$\endgroup$
  • $\begingroup$ That explains everything! But that makes me wonder how do I check whether they are coplanar or not... $\endgroup$ – Xavier Arias Botargues Jul 29 '12 at 12:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.