繁体   English   中英

用x轴计算角度的最快方法

[英]fastest way to compute angle with x-axis

计算直线和x轴之间角度的最快方法是什么?

我需要定义一个函数,它在PI:2PI间隔是Injective(我必须在最高点和下面的任何点之间的角度)。

PointType * top = UPPERMOST_POINT;
PointType * targ = TARGET_POINT;

double targetVectorX = targ->x - top->x;
double targetVectorY = targ->y - top->y;

第一次尝试

//#1
double magnitudeTarVec = sqrt(targetVectorX*targetVectorX + targetVectorY*targetVectorY);
angle = tarX / magTar;

第二次尝试

//#2 slower
angle = atan2(targetVectorY, targetVectorX);

我不需要直接角度(弧度或度数),只要通过比较这种值从2点我可以判断哪个角度更大,任何值都可以。 (例如,示例1中的角度介于-1和1之间(它是余弦参数))

我刚刚编写了最快的方法来按角度对矢量进行排序,而没有实际计算角度中找到函数单调的一般问题的角度,没有任何代码或与C ++或类似的连接。 基于目前接受的答案,我现在建议

double angle = copysign( // magnitude of first argument with sign of second
  1. - targetVectorX/(fabs(targetVectorX) + fabs(targetVectorY)),
  targetVectorY);

目前接受的答案相比,最大的好处是您不必担心无限值,因为所有非零向量(即targetVectorXtargetVectorY不会同时等于零)将导致有限伪角值。 对于实际角度[-π...π],得到的伪角将在[-2 ... 2]的范围内,因此符号和不连续性就像你从atan2得到它们一样。

检查y是否为atan2; 然后商x / y会很好。 (假设我理解正确)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM