我需要一个有效的索引/搜索算法和/或数据结构,以确定一个时间间隔是否与列表中的零或多个时间间隔重叠,同时要记住,完全重叠是部分重叠的特例。到目前为止我还没有想出任何快速或优雅的..。
考虑一个间隔的集合,每个间隔有两个日期--开始和结束。
间隔可以是大的,也可以是小的,它们可以部分重叠,或者完全不重叠。在Java表示法中,如下所示:
interface Period
{
long getStart(); // millis since the epoch
long getEnd();
boolean intersects(Period p); // trivial interse
与查询带有开始日期和结束日期的间隔列表不同,从仅与搜索开始日期和结束日期重叠的列表中检索所有间隔,最好的方法是:
From a list of date intervals,
Find all unique sets of intervals
Where every interval in each set overlaps with each other interval in that set
使用整数示例,取整数间隔[{1,3},{2,4},{4,5},{5,7},{6,8}]的列表。从这个列表中,下面是所有唯一的间隔集,其中每一组中的每个间隔与彼此的重叠
{ {1,3}, {2,4}
我想实现地形碰撞。我有一门课叫GeoTerrain。它的构造函数以一幅图片为参数,然后从三角形构建一个地形,每个光像素的顶点高,每个暗像素的顶点低。这使我在一个位置,我必须实现一个适当的碰撞检测,为OBB时,他们击中了地形。但我的临时解决方案还远远不够有力。
这是我目前的方法:每个表面三角形都有自己的小hitbox,它由6个顶点组成(三角形表面上的3个顶点和三个附加的顶点,它们基本上是3个表面顶点,但沿着表面法线移动(因此它们位于可见表面之下)。
原因:因为我不知道如何在没有hitbox卷的情况下计算最小平移向量。
抱歉,代码太长了--我尽可能多地评论一下:
// This method re
给定两个间隔A= 1,10和B= 3,7。返回所有不重叠的间隔,结果是1,2和8,10。
假设A和B之间总是有重叠。
我试着把问题分成几种情况:假设你想在A和B之间找到不重叠的间隔。
Case 1:
A = [0, 5] and B = [2, 3].
The result would be [0, 1] and [4, 5].
General case:
if A[0] < B[0] and B[1] < A[1]
then [A[0], B[0] - 1] and [B[1] + 1, A[1]]
Case 2:
A = [0, 5]
设S是可能重叠的自然数的一组区间(包含n个区间),N是一个数字列表(包含n个数字)。
我想找出S的最小子集(让我们调用P),这样对于列表N中的每个数,P中至少存在一个包含它的区间。允许P中的间隔重叠。
微不足道的例子:
S = {[1..4], [2..7], [3..5], [8..15], [9..13]}
N = [1, 4, 5]
// so P = {[1..4], [2..7]}
我找到了解决这个问题的方法,如下所示
N = MergeSort (N)
upper, lower = infinity, -1
P = empty set
for each q in N do
如果我有3个或更多数据帧列表。每一个都有区间,然后我想找出这些区间之间是否有交集。如果它们相交,我们需要删除交叉点。例如
d1<-cbind(st=c(1,4,6),ed=c(7,8,10)); d2<-cbind(st=c(4,8,17),ed=c(7,12,20)); d3<-cbind(st=c(1,8,25),ed=c(3,13,30))
l<-list(d1,d2,d3); l
为了便于可视化,我绘制了它们,黑色间隔来自d1,蓝色d2和红色d3。其思想是删除相交区域,例如d1中的间隔1和d2中的1以及d3相交中的1。我希望结果是
d2; st ed