我有一個向量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便宜很多。不過,我想這取決於你的確切的運營細分。 –