1

请帮助计算斜率的算法所以我们有一个笛卡尔坐标系。X 就在 Y 的顶部。有一条线穿过坐标中心。需要确定相对于轴 OX 的角度。

所以这就是我正在做的

  1. 某些功能转移到原点(顶行)和行尾
  2. 确定 dx, dy
  3. Hildren在atan2中放出两个参数(dy, dx)
  4. 以弧度返回结果。

但!我 atan2 只能在 180 度范围内工作。180 后又往另一个方向走。

所以问题是:找到角度的正确算法是什么?我需要采用 dy、dx 的大小吗?如何计算所有 360 度及更多的反正切?我很高兴听到特定的算法或代码注释。谢谢!

static inline CGFloat angleBetweenLinesInRadians2 (CGPoint line1Start, CGPoint line1End)
{
CGFloat dx = 0, dy = 0;

dx = line1End.x - line1Start.x; / / whether to do fabs (line1End.x - line1Start.x);
dy = line1End.y - line1Start.y;

CGFloat rads = atan2 (dy, dx); / / whether to do fabs (rads)

return rads;
}
4

2 回答 2

4

atan2() 应该返回区间 [-pi,pi] (即 [-180, 180] )中的值,并与 x 和 y 的符号一起计算象限。( C++ 参考)

所以从技术上讲,你有 360 度。

于 2010-11-03T09:53:24.377 回答
0

计算 0 到 360 度角的公式:

f(x,y)=180-90*(1+sign(x))* (1-sign(y^2))-45*(2+sign(x))*sign(y)

    -180/pi()*sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))

    x=x2-x1 and y=y2-y1 .
于 2018-12-29T00:19:49.973 回答