gpt4 book ai didi

c - 用另一个 vector 就地更新一个 vector 的快速方法

转载 作者:行者123 更新时间:2023-11-30 14:27:08 25 4
gpt4 key购买 nike

我有一个 vector A,由角度和长度表示。我想添加 vector B,更新原始 A。B 来自查找表,因此可以用任何一种使计算更容易的方式表示它。

具体来说,A 的定义如下:

uint16_t A_angle; // 0-65535 = 0-2π
int16_t A_length;

近似值很好。没有必要检查溢出。可以使用快速正弦/余弦近似。

我能想到的最快方法是将B表示为分量 vector ,将A转换为分量,将A和B相加,将结果转换回角度/长度并替换A。(这需要添加一个快速asin/acos)

我不太擅长数学,想知道我是否缺少更明智的方法?

我主要是在寻找一种通用方法,但是关于 C 语言中有用的微优化的具体答案/评论也很有趣。

最佳答案

如果您需要执行大量加法运算,则可能值得考虑将所有内容存储在笛卡尔坐标中,而不是极坐标中。

Polar 非常适合旋转操作(我猜还有缩放),但坚持使用笛卡尔坐标(旋转是四次乘法,见下文)可能比使用 cos/sin/acos/asin every 更便宜是时候你想做 vector 加法了。当然,这取决于您案例中的操作分布。

仅供引用,笛卡尔坐标系中的旋转如下(请参阅 http://en.wikipedia.org/wiki/Rotation_matrix ):

x' = x.cos(a) - y.sin(a)
y' = x.sin(a) + y.cos(a)

如果提前知道a,则可以预先计算cos(a)sin(a)

关于c - 用另一个 vector 就地更新一个 vector 的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8181690/

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