标签: atan2

计算没有std函数或C99的atan2

我正在从3轴加速度计计算角度,但我的编译器没有atan或atan2功能.它有一个保留的内存插槽,但它调用了一个我在任何文件中都找不到的功能.

我的编译器是运行ARMCC编译器的KeilμVision4.编译有文件math.h,但函数是extern并且不存在:

  extern _ARMABI double atan2(double /*y*/, double /*x*/);
Run Code Online (Sandbox Code Playgroud)

是否有我可以包含的lib或函数,它具有arctan函数的实现?或者是否有另一种从加速度计计算角度的功能?我需要对角度进行完整的3轴校准.

编辑:我希望避免一个充满预先计算值的表格.

c embedded math arm atan2

4
推荐指数
2
解决办法
1万
查看次数

绘制直观的角度图

我正在尝试绘制一个物体的标题.我有四个点向量 - 让我们称之为

  • mdex
  • mdey(又名x1,y1),
  • thpx
  • thpy(又名x2,y2).

yx(dydx)中找到了变化和变化,然后将其输入到atan2d函数中.然后我浏览结果并将它们绘制到图表上.

图表上的比例从-180到180.当线路经过-180或180度时,我的问题就出现了.然后它"弹出"到图表的另一侧(即,181实际上是-179).

这是有问题的,因为当它确实没有时,它看起来像角度发生了巨大的变化 - 它只是'翻身'.另外,这会搞砸我的角速度计算,这是根据点之间的变化来计算的.最初,我只是尝试通过向低于0的所有值添加180来将图形转换为0-360比例.这不起作用.

这是图表,因此您可以更好地理解问题(图表是在我尝试0-360转换后).

胡说

我的问题

我想知道是否有一个不同的功能,我可以用来计算角度,这将给我一个不断增加的值,一种修改数据以便绘制得很好的方法,或者一种修改图形的方法,使它看起来很直观?

提前致谢!

matlab plot graph angle atan2

4
推荐指数
1
解决办法
533
查看次数

atan2与2点之间的角度

我正在读这篇关于获得2分之间角度的帖子,并且在想.我认为atan2定义为atan2(y,x),这里它是atan2(deltaX,deltaY),为什么x现在是第一个?

public float getAngle(Point target) {
    float angle = (float) Math.toDegrees(Math.atan2(target.x - x, target.y - y));

    if (angle < 0) {
        angle += 360;
    }

    return angle;
}
Run Code Online (Sandbox Code Playgroud)

java atan2

3
推荐指数
1
解决办法
1万
查看次数

指定Math.atan2的原点

Math.atan2()是一个非常有用的计算角度的函数.但是,我无法绕过一件事:

$(document).mousemove(function(event){
    r = Math.atan2(event.pageY, event.pageX);
    deg = r * 180/Math.PI;
    console.log(deg);   
})
Run Code Online (Sandbox Code Playgroud)

console.log表示计算角度的0,0位于屏幕的左上角.如何从不同的原点计算角度,比如说屏幕的中心?

javascript math jquery geometry atan2

3
推荐指数
1
解决办法
1123
查看次数

与OpenGL GLSL中的atan(y/x)和atan2(y,x)有什么不同

我在理解glsl中函数atan的结果时遇到了一些问题.文档也缺乏.

例如,我需要将顶点转换为球面坐标,转换球面坐标的半径,然后将其转换回笛卡尔坐标.我在以0为中心的半径为2的二氧化碳球的顶点上使用以下变换.

vec3 to_sphere(vec3 P)
{
    float r = sqrt(P.x*P.x + P.y*P.y + P.z*P.z);
    float theta = atan(P.y,(P.x+1E-18));
    float phi= acos(P.z/r); // in [0,pi]
    return vec3(r,theta, phi);
}

vec3 to_cart(vec3 P)
{
    float r = P.x;
    float theta = P.y;
    float phi = P.z;
    return r * vec3(cos(phi)*sin(theta),sin(phi)*sin(theta),cos(theta);
}

void main()
{
    vec4 V = gl_Vertex.xyz;
    vec3 S = to_sphere(V.xyz);
    S.x += S.y;
    V.xyz = to_cartesian(S);

    gl_Position = gl_ModelViewProjectionMatrix * V;
}
Run Code Online (Sandbox Code Playgroud)

但如果我使用atan(y/x)或者结果会有所不同atan2(y,x).我把小1E-18常数放在一边以避免极点.

为什么会这样?我假设返回的值 …

opengl math glsl atan2 coordinate-transformation

3
推荐指数
1
解决办法
3562
查看次数

atan2对于任意相移的两个正弦曲线?

我正在尝试实现一个类似于atan2的函数,以将任意相对相移的两个输入正弦信号映射到从0到线性变化的单个输出信号2?atan2通常假设两个信号具有90度相移。

给定y0(x) = sin(x)y1 = sin(x + phase),哪里phase有一个固定的非零值,我该如何实现一种以x模数返回的方法2?

c algorithm math atan2

3
推荐指数
1
解决办法
258
查看次数

我收到错误,“atan2() 恰好需要 2 个参数(给定 1 个)”

我\xc2\xb4m 是编程新手,所以我不知道出了什么问题。请帮忙

\n\n
from math import atan2, pi\nx = int(input("value of x"))\ny = int(input("value of y"))\nr = (x**2 + y**2) ** 0.5\nang = atan2(y/x)\nprint("Hypotenuse is", r, "angle is", ang)\n
Run Code Online (Sandbox Code Playgroud)\n

python atan2

2
推荐指数
1
解决办法
3232
查看次数

求相对于任意原点的两点之间的顺时针角度

我在第一象限有两个点 A(X,Y) 和 B(P,Q)。还有一点C(L,M)。如何在顺时针方向找到 CA 和 CB 之间的角度?

我搜索了很多,所有的解决方案都使用了 atan2() 但它找到了相对于 x 轴的原点角度。

可以假设 C 和 A 是固定的。 B 可以在第一象限的任何地方

可以假设 C 和 A 是固定的。B 可以在第一象限的任何地方。角度必须是顺时针方向且在 0-360(或 0 到 360-1)范围内。

我在 C/C++ 中这样做。

编辑:为每个请求添加代码。这有点不同,因为我陷入了一个概念并需要对其进行澄清。如果点 x,y 位于 50,50 和 P 之间,此函数应该返回。 P 是相对于 CA 的角度。

bool isInsideAngle(long double x,long double y, long double p)
{   
    if((atan2(y,x) >= atan2(50,100)) && (atan2(y,x) <= (p * PI / 50)))
    {
        // cout<<"YES!";
        //   cout<<" atan2(y,x) = " <<atan2(y,x)*180/PI<<endl;
        //   cout<<" atan2(50,50) = " <<atan2(50,100)*180/PI<<endl;
        //   cout<<" (p * PI …
Run Code Online (Sandbox Code Playgroud)

c c++ math atan2 computational-geometry

2
推荐指数
1
解决办法
4704
查看次数

x和y的atan2输出为0

theta=atan2(0,0);
Run Code Online (Sandbox Code Playgroud)

这个语句的输出是0,但它是一个0/0形式,所以它的输出如何为0,甚至维基百科说它应该是未定义的,请解释为什么编译器给出0作为该语句的输出.

c trigonometry angle undefined atan2

2
推荐指数
1
解决办法
1932
查看次数

这个nvidia的arctan2背后的逻辑是什么?

Nvidia在Cg 3.1 Toolkit文档中有一些功能

arctan2实现如下

float2 atan2(float2 y, float2 x)
{
  float2 t0, t1, t2, t3, t4;

  t3 = abs(x);
  t1 = abs(y);
  t0 = max(t3, t1);
  t1 = min(t3, t1);
  t3 = float(1) / t0;
  t3 = t1 * t3;

  t4 = t3 * t3;
  t0 =         - float(0.013480470);
  t0 = t0 * t4 + float(0.057477314);
  t0 = t0 * t4 - float(0.121239071);
  t0 = t0 * t4 + float(0.195635925);
  t0 = t0 * t4 - float(0.332994597);
  t0 …
Run Code Online (Sandbox Code Playgroud)

c nvidia polynomial-math numerical-methods atan2

2
推荐指数
1
解决办法
186
查看次数