我正在尝试优化实验中的模拟功能,这样我就可以一次运行更多的人工大脑控制代理。我分析了我的代码,发现我的代码现在的最大瓶颈是计算每个代理到每个代理的相对角度,即 O(n 2 ),减去我所做的一些小的优化。这是我用于计算角度的当前代码片段:
[C++]
double calcAngle(double fromX, double fromY, double fromAngle, double toX, double toY)
{
double d = 0.0;
double Ux = 0.0, Uy = 0.0, Vx = 0.0, Vy = 0.0;
d = sqrt( calcDistanceSquared(fromX, fromY, toX, toY) );
Ux = (toX - fromX) / d;
Uy = (toY - fromY) / d;
Vx = cos(fromAngle * (cPI / 180.0));
Vy = sin(fromAngle * (cPI / 180.0));
return atan2(((Ux * Vy) - (Uy * Vx)), ((Ux * Vx) + (Uy * Vy))) * 180.0 / cPI;
}
我有两个 2D 点 (x 1 , y 1 ) 和 (x 2 , y 2 ) 以及“从”点 (x a )的朝向。我想计算代理 x 需要转向(相对于其当前面向)面对代理 y 的角度。
根据分析器,最昂贵的部分是atan2。我已经用谷歌搜索了几个小时,上面的解决方案是我能找到的最好的解决方案。有谁知道计算两点之间角度的更有效方法?如果这会影响任何事情,我愿意为速度牺牲一点精度(+/- 1-2 度)。