请帮助计算坡度的算法,以便我们有一个笛卡尔坐标系。 x在顶部。有一条线穿过坐标中心。需要确定与轴OX相对的角度。

所以这是我在做的

  1. 某些功能转移到原点(顶线)和线路结束
  2. 确定dx,dy
  3. Hildren在Atan2中释放两个参数(DY,DX)
  4. 返回弧度的结果。

但!我的Atan2仅在180度以内工作。在180之后朝另一个方向前进。

因此,问题:找到角度的正确算法是什么?我需要在幅度上取DY,DX值吗?如何制作全部360及以上的Arctangent?我很高兴听到特定的算法或代码评论。 thanx!

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;
}
有帮助吗?

解决方案

atan2()应该在[-pi,pi](即[-180,180])的间隔中返回一个值,并与x和y的符号一起工作以找出象限。 ((C ++参考)

因此,从技术上讲,您有360度。

其他提示

计算从0到360度的角度计算的公式:

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

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

    x=x2-x1 and y=y2-y1 .
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top