【问题标题】:Efficient Magnitude Calculation of 3D Vector3D 矢量的高效幅值计算
【发布时间】:2018-06-26 16:16:47
【问题描述】:

我正在使用 3 轴加速度计和 Arduino 进行惯性测量项目。我希望 Arduino 接收 x、y 和 z g 值并输出大小。由于 |a| = sqrt(x^2 + y^2 + z^2) 计算量很大,我想研究是否有另一种算法可以用来加速它(我愿意牺牲一点准确性)。

我读到了Alpha-max, Beta-min method,但这似乎只适用于二维向量。 3D 向量有什么类似的吗?

编辑:程序语言是 C++

【问题讨论】:

  • 如果您标记您正在使用的编程语言会很有帮助,因为性能影响会因此而有所不同。如果您使用 Python numpy 通常是计算的高性能选项。 This answer 展示了如何使用它来计算矢量幅度的示例。
  • 它是用 C++ 编写的,将其添加到原始帖子中。谢谢!
  • 微控制器上的 sqrt 计算可能很昂贵,但您需要它有多快?你愿意牺牲多少精度?关于您的输入,您是否知道任何可以利用的信息(例如,它们是浮点数还是整数,它们在什么范围内?)
  • 我正在拍摄 100Hz 采样。鉴于它必须完成的其他任务,我还没有机会看看这是否可能,但由于我仍处于计划阶段,我认为最好现在就开始优化效率。

标签: c++ algorithm vector magnitude


【解决方案1】:

如果您有一种快速计算two-dimensional 震级的方法,那么也许three-dimensional 震级可以用这些术语进行重组。

三维大小可以从 Pythagorean theorem.

|a| = sqrt(sqrt(x^2 + y^2)^2 + z^2) = sqrt(x^2 + y^2 + z^2)

【讨论】:

  • 这是个好主意,我会试试这个,看看它是否更快。谢谢!
【解决方案2】:

Normalizing Spatial Vectors without Square Root 如果你用这个人发的东西来计算单位向量,那么你就可以将原向量的x除以计算出的单位向量的x。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2014-11-10
    • 2014-01-02
    • 2019-01-23
    • 2012-06-16
    相关资源
    最近更新 更多