【问题标题】:How to get average direction from a set of 2d Vectors using linq? [closed]如何使用 linq 从一组二维向量中获取平均方向? [关闭]
【发布时间】:2018-09-08 23:09:17
【问题描述】:

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

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

【问题讨论】:

  • 如果您要求特定类型的实现 (LINQ),这是否意味着您有不同的(非 LINQ)实现?如果是这样,请分享该代码。如果不是,为什么必须是 LINQ?
  • 任何实现都对我有用,但我认为 LINQ 会是最短且最容易理解的。
  • 请包含样本数据。你说,“我有一个List<Vector2d>。如果您提供初始化此列表的示例代码将会很有帮助,因此我们都在使用相同的数据。
  • @RufusL:提供 Vector2d 示例代码。
  • 谢谢。如果你有时间,用 12 点初始化 List 会很好。 :)

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


【解决方案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,它使用向量的点积非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多