计算线相对于中心坐标的斜率的算法

时间:2010-11-03 09:35:08

标签: geometry atan2

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

所以这就是我正在做的事情

  1. 某些功能转移到原点(顶行)和行尾
  2. 确定dx,dy
  3. Hildren在atan2(dy,dx)
  4. 中释放两个参数
  5. 以弧度返回结果。
  6. 但是!我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;
    }
    

2 个答案:

答案 0 :(得分:4)

atan2()应该在区间[-pi,pi]中返回一个值(即[-180,180]),并使用x和y的符号来计算象限。 (C++ ref

从技术上讲,你有360度。

答案 1 :(得分:0)

用于计算0到360度角的公式:

f(x,y)= 180-90 *(1+符号(x))*(1-符号(y ^ 2))-45 *(2+符号(x))*符号(y)< / p>

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

    x=x2-x1 and y=y2-y1 .