找到XYZ之间的最小距离

Finding the smallest distance between xyz

本文关键字:距离 XYZ 之间 找到      更新时间:2023-10-16

嗨,好吧,这样。我们有12名球员我想做的就是找到最接近的球员。

我已经写了一些代码;我的尝试的两个版本(相信我的更多,现在可以写一本圣经)

/*int client::closestEnemy()
{
    for(u32 i = 0; i<12; i++)
    {
        DbgPrint("i: %in", i);
        u32 index = 0;
        if(!p[i].exist() || !p[i].alive() || p[i].team() == 3 || i == s.index) 
                 continue;
        for(u32 o = 0; o<12; o++) 
                 if(vec.distance(*pos(), *p[i].pos()) <= vec.distance(*pos(), *p[o].pos()) || vec.distance(*pos(), *p[i].pos()) == vec.distance(*pos(), *p[o].pos()))
                       index++;
        DbgPrint("PLAYER %s INDEX = %in", p[i].readName(), index);
        if(index>10)  
            return i;
        index = 0;
    }
    return -1;
}*/

int client::closestEnemy()
{
    float distacnes[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    u32 index = 0;
    for(u32 i = 0; i<12; i++)
        if(p[i].exist() || p[i].alive() || p[i].team() != 3 || i != s.index) 
             distacnes[i] = vec.distance(*pos(), *p[i].pos()); 
        else 
             continue;
    for(u32 i = 0; i<12; i++) 
         if(distacnes[i]<distacnes[i+1]) 
             index++;
    DbgPrint("Score = %in", index);
    if(index>11) 
        return index;
    return -1;
}

我正在做的只是将索引增加1时,当其他客户距离比我的距离更大时。

现在,第一个是最好的选择,但有时不会产生足够高的索引,这使得零有意义,因为至少一个客户必须具有较小的距离。

首先,我想一些凹痕会有所帮助。然后,无需存储所有距离。您可以跟踪到目前为止遇到的最小距离,因此:

int client::closestEnemy()
{
    int index = -1;
    float minDistance;
    for(u32 i = 0; i<12; i++) {
        if(p[i].exist() || p[i].alive() || p[i].team() != 3 || i != s.index) {
            float distance = vec.distance(*pos(), *p[i].pos());
            if (index == -1 || distance < minDistance) {
                index = i;
                minDistance = distance;
            }
        }
    }
    return index;
}