三维空间的两条直线是否相交

  今天偶然看到一道题目,如何编程来判断,三维空间中的两条线段是否相交?两条直线是否相交?

  第一眼看到想到了二维坐标系中的简化版,在二维的空间中,判断两条线是否相交,可以分别对横坐标,纵坐标投影,并判断是否都有重合。投影的过程,其实就相当于维度的简化。因此,对于三维坐标系中的两条线段,第一个想法也是分别对三个二维平面投影,简化为三个二维平面中的线段是否相交,重合的判断。这里有一个陷阱,就算在三个二维平面都有交点的线段在三维空间也可能是不相交的,反之者必然成立。也就是说,前者是后者的必要非充分条件。

  进一步考虑到,如果线段相交,那么在三个二维平面上投影的交点是同一个点,而如果不相交,而在三个投影均相交,那么三个投影交点必然不是同一个原始点,不论是在哪条直线上。因此,可以通过反正法来排除是两条不相交的直线。

  证明方式就是先作投影,如果不是三个二维面上都有焦点,则线段不相交;如果都有交点,则选取三个交点,得到原始三维空间中线段上的点,如果点重合,则线段相交,反之不相交。

  还有一种更直观一点的证明方式,通过坐标变换,将其中一条线段的作为x轴,一个端点为原点,另一端延伸为x轴正向,变换另外一条线段的坐标,接下来就是判断一条直线是否跟x轴相交。方法有多种,不细诉了。

猜你喜欢

转载自michaelhqs.iteye.com/blog/1991229