Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法:如何找到最近的元素,有坐标和尺寸_Algorithm_Sorting_Bounds - Fatal编程技术网

Algorithm 算法:如何找到最近的元素,有坐标和尺寸

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,y,宽度和高度。e、 g.arr[{10,20200300},{20,30100200},…]现在我想找到这个数组中距离给定对象最近的对象,考虑到它的边界。
我如何实现这一点,例如,在右边有一个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