Algorithm 算法:如何找到最近的元素,有坐标和尺寸
我得到了一个包含对象的数组,每个对象包含x,y,宽度和高度。e、 g.arr[{10,20200300},{20,30100200},…]现在我想找到这个数组中距离给定对象最近的对象,考虑到它的边界。Algorithm 算法:如何找到最近的元素,有坐标和尺寸,algorithm,sorting,bounds,Algorithm,Sorting,Bounds,我得到了一个包含对象的数组,每个对象包含x,y,宽度和高度。e、 g.arr[{10,20200300},{20,30100200},…]现在我想找到这个数组中距离给定对象最近的对象,考虑到它的边界。 我如何实现这一点,例如,在右边有一个x优先级(在x轴上找到距离给定对象最近的对象) 假设对象的中心是(x,y),宽度w,高度h 数组中的对象(我想是矩形)具有中心(xi,yi)和宽度wi,hi 您的对象将从右边缘、上边缘或下边缘连接到其他对象,其坐标为: R1 - R2: ((x+(w/2)),
我如何实现这一点,例如,在右边有一个x优先级(在x轴上找到距离给定对象最近的对象) 假设对象的中心是
(x,y)
,宽度w
,高度h
数组中的对象(我想是矩形)具有中心(xi,yi)
和宽度wi
,hi
您的对象将从右边缘、上边缘或下边缘连接到其他对象,其坐标为:
R1 - R2: ((x+(w/2)), (y-(h/2))) - ((x+(w/2))), ((y+(h/2)))
T1 - T2: ((x-(w/2)), (y+(h/2))) - ((x+(w/2))), ((y+(h/2)))
B1 - B2: ((x-(w/2)), (y-(h/2))) - ((x+(w/2))), ((y-(h/2)))
阵列中的对象可能从其相似的左边缘、上边缘或下边缘开始具有最短的距离
Li1 - Li2: ((xi-(wi/2)), (yi-(hi/2))) - ((xi-(wi/2))), ((yi+(hi/2)))
Ti1 - Ti2: ((xi-(wi/2)), (yi+(hi/2))) - ((xi+(wi/2))), ((yi+(hi/2)))
Bi1 - Bi2: ((xi-(wi/2)), (yi-(hi/2))) - ((xi+(wi/2))), ((yi-(hi/2)))
那么
距离=无限;
最短=空;
对于数组中的所有对象
查找的最小距离
R2至[Li1,Li2]线
R1至[Li1,Li2]线
R2至[Bi1,Bi2]线
R1至[Bi1,Bi2]线
R2至[Ti1,Ti2]线
R1至[Ti1,Ti2]线
T2至[Li1,Li2]线
T1至[Li1,Li2]线
T2至[Bi1,Bi2]线
T1至[Bi1,Bi2]线
T2至[Ti1,Ti2]线
T1至[Ti1,Ti2]线
B2至[Li1,Li2]线
B1至[Li1,Li2]线
B2至[Bi1,Bi2]线
B1至[Bi1,Bi2]线
B2至[Ti1,Ti2]线
B1至[Ti1,Ti2]线
如果心灵距离<距离
距离=距离
最短=i
结束
根据阵列中对象与对象的相对位置,可以跳过其中一些计算。例如,如果Ti1
,则不需要计算[Bi1,Bi2]行
部分
我觉得这个解决方案非常直截了当&愚蠢,会受到数学家们的严厉批评,但我想看看他们的反应 从表面上看你们的最后一句话:这能解释附件吗?我想不能。我认为不需要,因为OP说“在x轴上找到离给定对象最近的对象”,但我不确定。谢谢你的回答,你知道javascript库/实现吗?我认为,如何通过“通过扩大边界寻找最近点”来实现这一点也很有趣。开始时不需要机柜/重叠,但将来可能需要。您必须定义一个,以及如何说明部分重叠(边界交叉)和机柜。从暴力开始。如果所花的时间真的让你烦恼,那就看一眼。
distance = infinite;
shortest = null;
for all object in array
find min distance for
R2 to [Li1,Li2] line
R1 to [Li1,Li2] line
R2 to [Bi1,Bi2] line
R1 to [Bi1,Bi2] line
R2 to [Ti1,Ti2] line
R1 to [Ti1,Ti2] line
T2 to [Li1,Li2] line
T1 to [Li1,Li2] line
T2 to [Bi1,Bi2] line
T1 to [Bi1,Bi2] line
T2 to [Ti1,Ti2] line
T1 to [Ti1,Ti2] line
B2 to [Li1,Li2] line
B1 to [Li1,Li2] line
B2 to [Bi1,Bi2] line
B1 to [Bi1,Bi2] line
B2 to [Ti1,Ti2] line
B1 to [Ti1,Ti2] line
if minDistance < distance
distance = minDistance
shortest = i
end for