【问题标题】:I cannot understand about the unity documentation explanation of 'Magnitude of Vector'我无法理解 \'向量大小\' 的统一文档解释
【发布时间】:2023-01-24 21:36:02
【问题描述】:

Vector3(或 Vector2)的幅度描述说

如果您只需要比较某些向量的大小,您可以使用 sqrMagnitude 比较它们的平方大小(计算平方大小更快)。

但是 Vector3.Magnitude 和 Vector3.sqrMagnitude 都是公共字段变量。

我认为 Vector3.Magnitude 和 Vector3.sqrMagnitude 都已经计算好了,所以我认为使用 Vector3.Magnitude 和 Vector3.sqrMagnitude 之间没有速度差异。但是为什么文档说 sqrMagnitude 更快呢?

【问题讨论】:

  • 幅度必须另外取平方根 => 需要再进行一次操作

标签: c# unity3d


【解决方案1】:

Vector 仅包含 x、y、z 分量。每次请求时都必须计算其他所有内容。混淆可能来自 Magnitude 看起来不像函数调用这一事实。但是 C# 具有属性,并且无论何时访问它们,它们都可以具有类似逻辑的功能。这就是这里发生的事情。每次您读取Magnitude 时,都会计算该值并且计算平方根的成本非常高。只获取一次你不会注意到时间,但如果你在每一帧都获取它来比较数十或数百个向量,你可能会遇到问题,尤其是在低端硬件上。

【讨论】:

    【解决方案2】:

    Magnitude/ sqrMagnitude 最有可能特性,因此它们很可能是按需计算的。如果您检查 Vector3 的 documentation,您可以看到所有这些都列在属性下。

    这是做这件事的自然方式。你可能有大量的载体,而且它们的寿命可能很短,所以你想尽量减少构建成本。预先计算震级之类的东西,以备不时之需,可能不是一个好方法。您还希望最小化存储,因此每次访问该属性时都可能重新计算量级。

    但如果你真的想知道有什么不同,最好的方法是just test it。编写一个创建类似 10^8 向量的最小程序,并使用秒表检查计算所有向量的大小需要多长时间。对 sqrMagnitude 做同样的事情,看看是否有任何区别。

    【讨论】:

    猜你喜欢
    • 2015-09-12
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多