我相信这个问题之前一定被问过了,但是我没有找到它:我只找到了相关的,但更难的问题。
我有四个点,表示两条线,如下所示:
A C B D
|------*---|-----+----|-*---+---|----------|
0 10 20 30 40
所以在这个例子中,AB = {7, 21}
和CD = {16,26}
。 (这些线段可以处于任何关系并且任意大小。)我想找出它们是否重叠,如果有的话重叠了多少。(在这个例子中,答案是5。)我的当前解决方案涉及一堆复杂的if/then步骤,我不禁想到是否存在一个漂亮的算术解决方案。 存在吗?
(附言:实际上,我正在进行边界框相交检测,但如果我可以在一个维度中解决它,另一个维度显然也是同样的。)
a <= b
和c <= d
,那么是的。我没有在你的问题中看到任何地方说明这种假设是安全的,所以我没有做出这个假设。我已经更新了我的答案。 - Mark Byersoverlap = min(b, d) - max(c, a)
,这正是我所说的整洁之处! :^, - sprugman