题
请帮助计算坡度的算法,以便我们有一个笛卡尔坐标系。 x在顶部。有一条线穿过坐标中心。需要确定与轴OX相对的角度。
所以这是我在做的
- 某些功能转移到原点(顶线)和线路结束
- 确定dx,dy
- Hildren在Atan2中释放两个参数(DY,DX)
- 返回弧度的结果。
但!我的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 .
不隶属于 StackOverflow