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

C# 如何使用linq从一组2d向量中获得平均方向?,c#,.net,linq,.net-3.5,C#,.net,Linq,.net 3.5,我有一个列表,其中Vector2d是这样一个简单的点实现:公共类Vector2d{public float X;public float Y;}。我选择了两个点,一个是基准点(蓝色,Vector2d表单;),另一个是方向点(橙色,Vector2d To;),如下所示: 如何使用LINQ或任何其他C#实现(以一种代码大小尽可能短且不需要外部(非开箱即用)库的方式)获得由方向形成的线下的所有点?此代码应该做(无法测试): var绿点= 所有点。除了(新[]{redPoint,bluePoint})

我有一个
列表
,其中Vector2d是这样一个简单的点实现:
公共类Vector2d{public float X;public float Y;}
。我选择了两个点,一个是基准点(蓝色,
Vector2d表单;
),另一个是方向点(橙色,
Vector2d To;
),如下所示:

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

此代码应该做(无法测试):

var绿点=
所有点。除了(新[]{redPoint,bluePoint})
.选择(p=>新向量(蓝点,p))
.其中(v=>{
var角度=角度(v,蓝红色向量);
返回角度>Math.PI/2&&
角度<3*Math.PI/2;});

您可能需要实现
AngleBetween
,使用vector的点积非常简单。

如果您要求特定类型的实现(LINQ),这是否意味着您有不同的(非LINQ)实现?如果是,请共享该代码。如果不是,为什么它必须是LINQ?任何实现对我来说都可以,但我认为LINQ将是最短和最简单的实现。请包含示例数据。你说,“我有一个
列表
”。如果您提供了初始化此列表的示例代码,这将非常有帮助,因此我们都使用相同的数据。@RufusL:提供了Vector2d示例代码。谢谢。如果您有时间,可以使用12个点初始化此列表。:)
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; });