代码之家  ›  专栏  ›  技术社区  ›  yozhik

相对中心坐标直线间坡度的计算方法

  •  1
  • yozhik  · 技术社区  · 15 年前

    请帮助计算坡度的算法 我们有一个笛卡尔坐标系。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;
    }
    
    2 回复  |  直到 7 年前
        1
  •  4
  •   BlueCookie    15 年前

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

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

        2
  •  0
  •   theodore panagos    7 年前

    计算0到360度角的公式:

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

        -180/pi()*sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))
    
        x=x2-x1 and y=y2-y1 .