我有一个List<Vector2d>
,其中Vector2d是一个简单的点实现,如下所示:public class Vector2d { public float X; public float Y; }
。我选择了两个基点(蓝色,Vector2d Form;
)和一个方向(橙色,Vector2d To;
),如下所示:
如何使用LINQ或任何其他C#实现获取方向形成的线下的所有点(以尽可能短的代码大小并且不需要外部(非开箱即用)库的方式?
答案 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
,使用矢量的点积非常简单。