【问题标题】:Sort an array of Vector2 relative to origin clockwise相对于原点顺时针对 Vector2 的数组进行排序
【发布时间】:2015-03-15 20:17:45
【问题描述】:

我发现了一段代码,我尝试使用它相对于指定的原点按顺时针顺序对 Vector2 的数组进行排序,但它是否有效似乎是随机的,而且它超出了我的知识能够解决它。

我从here 找到this code,我正在使用那个,但我怀疑它有问题,我无法找到问题,所以如果有问题,我需要帮助修复代码有问题。

这是我的使用方法(以防我做错了这部分)

Vector2[] clockwise = new Vector2[] { point1, point2, point3 };
Array.Sort(clockwise, new ClockwiseComparer((point1 + point2 + point3) / 3f));

提前致谢!

【问题讨论】:

  • 正确设置原点,而不是添加所有向量。
  • 如何“正确设置”?这 3 个点几乎是随机生成的,我需要这 3 个点按顺时针顺序排列。我认为将 3 个向量相加并除以 3 会将原点设置为中心。我做了一些测试,将中心可视化,看起来很明显我的点就是中心,所以向量应该正确排序,但它们没有。
  • 您必须选择“点 0”(实际上是向量零)是什么。 IE。在 12 点钟的手表上,这将是一个 Vector(0,1) (x=0, y=1)。然后可以将向量排序为从该向量开始的角度。
  • @Darek 我不确定我是否理解。你能举个例子吗?我的向量并不总是接近 (0,0)。
  • 比较器需要一个排序的起点。当数组排序时,比较器被调用以比较两个向量。

标签: c# arrays sorting vector unity3d


【解决方案1】:

给你。没有看到您的 Vector2 ctor,我不知道这是否可行。

Vector2[] clockwise = new Vector2[] { point1, point2, point3 };
clockwise = Array.Sort(clockwise, new ClockwiseComparer( new Vector2(0,1));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2011-10-16
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多