首页 新闻 搜索 专区 学院

List 求两个元素距离小于一定值

0
悬赏园豆:10 [已解决问题] 解决于 2021-04-28 13:45

//model类
public class ImgRecognition{
public string name;//name 可能为三种 bird 、car 、person
public int x;
public int y;
}

List<ImgRecognition> list = new List<ImgRecognition> ();

public bool HaveBirdAndPerson(List<ImgRecognition> list ){
//人、车距离小于200的返回true,
// 换句话说,只要有1辆车200范围内有人就返回true
//不想用双重循环,有点笨了,还有啥奇怪的方法吗?运行速度要快点

}

C#
小草上飞飞的主页 小草上飞飞 | 菜鸟二级 | 园豆:317
提问于:2021-04-28 10:47
< >
分享
最佳答案
0

按上面的,如果加上linq。。。

收获园豆:6
顾晓北 | 专家六级 |园豆:10357 | 2021-04-28 11:17

写出来看看噢大佬

andlp | 园豆:204 (菜鸟二级) | 2021-04-28 11:24

@andlp: 没有,我觉得楼上可能理解错了,你是从一个列表里找出两两距离超过200的,而他其实是找列表里某一个,我觉得这种东西应该有第三方库能解决,自己写的话,其实应该也是循环一遍列表,列表里用linq,linq最多也就代替一次循环。。。

顾晓北 | 园豆:10357 (专家六级) | 2021-04-28 11:37
其他回答(1)
0

數學不好不會算距離
但循環一次list就可以了吧
這樣?

public bool HaveBirdAndPerson(List<ImgRecognition> list)
{
    var cars = list.Where(l => l.name == "car").ToList();
    var others = list.Where(l => l.name != "car").ToList();

    if (cars.Any() && others.Any())
    {
        foreach (var c in cars)
        {
            foreach (var o in others)
            {
                if (Math.Pow(Math.Pow(c.x - o.x, 2) + Math.Pow(c.y - o.y, 2), 0.5) >= 200)
                {
                    return true;
                }
            }
        }
    }

    return false;
}

修改了

收获园豆:4
RosonJ | 园豆:4905 (老鸟四级) | 2021-04-28 11:04

算两个东西的距离,怎么也是两个东西相减的平方和开方吧?直接算这个人到原点的距离?

支持(1) 反对(0) 顾晓北 | 园豆:10357 (专家六级) | 2021-04-28 11:16

@顾晓北:
我沒看懂問題哈哈

支持(0) 反对(0) RosonJ | 园豆:4905 (老鸟四级) | 2021-04-28 11:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册