gpt4 book ai didi

c# - 为什么这个循环不规范化我的 Vector2 列表?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:19 24 4
gpt4 key购买 nike

请看下面的代码:

    List<Vector2> axes = new List<Vector2>();
axes.Add(TopRight() - TopLeft());
axes.Add(BottomLeft() - TopLeft());
axes.Add(otherRectangle.TopRight() - otherRectangle.TopLeft());
axes.Add(otherRectangle.BottomLeft() - otherRectangle.TopLeft());
// Try normalizing vectors?
foreach (Vector2 axis in axes)
{
axis.Normalize();
}

Vector2.Normalize() method 是一个 void 方法,用于规范化调用它的向量。但是由于某种原因,当我执行此循环时,它不会对向量进行归一化。我只是无法通过这种方式修改列表吗?

一些奇怪的地方:

  • 用 for 循环迭代,即 axis[i].Normalize()不起作用。
  • 使用内置的 List<T>.ForEach 进行迭代迭代器不起作用。
  • 在将向量添加到列表之前创建规范化向量而不是遍历列表确实有效。

为什么迭代不起作用?

最佳答案

foreach 循环创建序列元素的本地副本。您只规范化副本。

您需要执行以下操作:

for(int i=0; i<axes.Count; i++)
axes[i] = Vector2.Normalize(axes[i]);

这种不直观的行为再次证明了为什么改变结构的实例方法不是一个好主意。

关于c# - 为什么这个循环不规范化我的 Vector2 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com