如何使用linq从一组2d向量获得平均方向?

时间:2018-03-29 21:39:15

标签: c# .net linq .net-3.5

我有一个List<Vector2d>,其中Vector2d是一个简单的点实现,如下所示:public class Vector2d { public float X; public float Y; }。我选择了两个基点(蓝色,Vector2d Form;)和一个方向(橙色,Vector2d To;),如下所示:

enter image description here

如何使用LINQ或任何其他C#实现获取方向形成的线下的所有点(以尽可能短的代码大小并且不需要外部(非开箱即用)库的方式?

1 个答案:

答案 0 :(得分:1)

这段代码应该做(不能测试):

var greenPoints = 
    allPoints.Except(new[] { redPoint, bluePoint })
             .Select(p => new Vector(bluePoint, p))
             .Where(v => {
                 var angle = AngleBetween(v, blueRedVector);
                 return angle > Math.PI / 2 &&
                        angle < 3 * Math.PI / 2; });

你可能需要实现AngleBetween,使用矢量的点积非常简单。