我有一个向量A,由角度和长度表示。我想添加向量B,更新原始的A.B来自一个查找表,所以它可以用任何方式表示,使得计算更容易。快速的方式就地更新一个向量与另一个向量
具体而言,A被定义正是如此:
uint16_t A_angle; // 0-65535 = 0-2π
int16_t A_length;
逼近的罚款。检查溢出是没有必要的。快速正弦/余弦近似可用。
我能想到的最快方法是将B表示为一个分量向量,将A转换为分量,将A和B相加,将结果转换回角度/长度并替换A.(这需要增加一个快速asin/acos)
我不是特别擅长数学并想知道如果我错过了一个更明智的方法吗?
我主要是在寻找一个通用的方法,但关于C中有用的微优化的具体答案/评论也很有趣。
如果您在笛卡尔坐标系中进行大量计算,您是否考虑过将所有矢量存储在笛卡尔坐标系中,并且只能在开始和结束时将极坐标转换为极坐标。 –
这是一个好点,我不断评估。例如,通过常量旋转矢量发生很多,需要极性。你的评论确实让我觉得,在另一个操作需要A的笛卡儿值的同时,我可能能够挤入此代码(在代码可读性方面花费了一些代价)。这使得转换回到唯一的一步。 – porgarmingduod
虽然旋转是极地的加法,但笛卡儿仅有4倍,这比cos/sin/acos/asin便宜很多。不过,我想这取决于你的确切的运营细分。 –