2D空间中重叠的线段

use*_*744 8 language-agnostic geometry line

我需要找出两条线是否相互重叠.如果两条线是并行的,我有一个返回0的交叉码.但后来我需要知道这两条平行线是否重叠.

编辑:

A                    C       B                D
-----------------------------------------------
Run Code Online (Sandbox Code Playgroud)

第1行:AB

第2行:CD

我需要找到第1行是否与第2行重叠,但两条线的斜率都可以> 0.

小智 13

你可以比较一下是否没有超过一圈.你将以这种方式进行较少的比较,因此效率很高.进行以下比较

D <A

B <C

如果两种情况都为真,则线条不重叠.否则必须有重叠.您将进行最少数量的比较以确定它们是否不重叠.否则将会有更多的比较.


Har*_*ine 2

既然您知道它们都是平行的,那么只需检查线段 CD 是否包含第一条线的任一端点(A 点和 B 点)。

  • 这是**充分**但不是**必要**条件。考虑整个线段CD与AB的一部分重叠的情况(例如区间[0,3]和[1,2])。有一个足够简单的修复方法,但如果您考虑尝试实际构建重叠(而不是仅仅确定重叠是否存在),它就会开始变得有点混乱。 (2认同)