标签: atan2

使用atan2在用鼠标拖动时旋转图像

我正在研究一个骨骼动画编辑器.现在,每个骨骼都有一个起点和终点,当鼠标位于一个点之下时,随后的拖动将导致骨骼根据鼠标的位置旋转.为此,我调用atan2并将鼠标坐标转换为本地空间,其中本地是鼠标按下的位置.虽然这"有效",但感觉确实是错误的.由骨形成的矢量不一定平行于鼠标点,它应该是.

我觉得atan2有些东西我不明白.

:

    if(boneUnderMouse)
    {
        boneUnderMouse->setAngle(startAngle + 
       (atan2((float)event.mouse.x - startX,event.mouse.y   - startY)));
    }
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ math atan2

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

如何在matlab中将atan2函数从-inf重新定义为inf?

我有一个旋转矢量R(x(t), y(t)),我想找到一个角度作为时间的函数.该atan2是之间确定-pipi,但它是不方便由我来分析所有动态.那么,有没有什么办法可以扩大atan2-infinf

matlab phase atan2

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

如何在ios中点击圈内圈时检测区域

在此输入图像描述我想在圈内敲击时找到该区域.实际上我做了一个计算,但那不准确.

检查我写的代码片段,以便在循环视图中找到选项卡的位置.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event" this method

     float  dx = touchLocation.x -160;
     float  dy = touchLocation.y - 240;
     double angle = atan2(touchLocation.x,touchLocation.y);
 /* Device is iPad */
            if (count==4) {


                if(angle>-1.639&&angle<=0.775)
                {
                    area=1;
                    NSLog(@"touched here  1 ********************************** ");
                }
                else if(angle>0.775&&angle<=1.579)
                {
                    area=2;
                    NSLog(@"touched here   2********************************** ");
                }
                else if(angle>1.579&&angle<=2.466)
                {
                    area=3;NSLog(@"touched here   3********************************** ");
                }
                else
                {
                    area=4;NSLog(@"touched here  4 ********************************** ");
                }


            }
            else  if (count==5) {


                if(angle>-1.520&&angle<=0.553)
                {
                    area=1;
                    NSLog(@"touched here  1 ********************************** ");
                } …
Run Code Online (Sandbox Code Playgroud)

atan2 ios

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

使用 atan2 的 FFT 的相位角 - 奇怪的行为。相移偏移?拆开?

我正在测试和执行简单的 FFT,并且我对相移感兴趣。我用正弦曲线生成 256 个样本的简单数组正弦曲线图10个周期。

我对这些样本执行 FFT 并接收复杂数据 (2x128)。然后我计算这些数据的大小,FFT 看起来像预期的那样: fft_magnitude_figure

然后我想计算 fft 复数输出的相移。我正在使用atan2。组合输出 fft_magnitude(蓝色)+ fft+phase(红色)如下所示: fft_mag_phase_figure 这几乎是我对“小”问题的期望。我知道这是包裹,但如果我想象将其展开,幅度峰值的相移读数为 36 度,我认为它应该为 0,因为我的输入正弦曲线根本没有移动。

如果我移动这个 -36 度(蓝色是同相,红色是移动的,蓝色打印仅供参考),正弦曲线看起来像这样:移位正弦图

如果我对这个红色数据执行 FFT,则幅度 + 相位输出如下所示:移位磁相相位图

因此很容易想象,展开相位在幅度峰值处将接近 0。所以有 36 度的偏移。但是,如果我准备每 256 个样本 20 个周期和 0 相移的数据,会发生什么sin_20_cyc_figure

如果我随后执行 FFT,则这是一个输出(幅度 + 相位):fft_sin_20_mag_phase_figure 我可以告诉你是否会跨越72度的峰值。所以现在有 72 度的偏移。

谁能给我提示为什么会发生这种情况?atan2() 相位输出是否与频率相关且偏移量为 2pi/周期(360 度/周期)?如何解开它并获得正确的结果(我找不到可解开的工作 C 库)。

它在 ARM Cortex-M7 处理器(嵌入式)上运行。

#define phaseShift 0
#define cycles 20

#include <arm_math.h>
#include <arm_const_structs.h>

float32_t phi = phaseShift * PI / 180; //phase shift in radians
float32_t data[256];  //input data for …
Run Code Online (Sandbox Code Playgroud)

c embedded fft phase atan2

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

cos(atan2(y,x))与使用复数<double>,C++的精度

我正在写一些坐标变换(更具体地说是Joukoswky变换,维基百科Joukowsky变换),我对性能很感兴趣,但当然精确.我试图以两种方式进行坐标转换:

1)使用双精度计算单独的实部和复杂部分,如下所示:

double r2 = chi.x*chi.x + chi.y*chi.y;

//double sq = pow(r2,-0.5*n) + pow(r2,0.5*n); //slow!!!
double sq = sqrt(r2); //way faster!
double co = cos(atan2(chi.y,chi.x));
double si = sin(atan2(chi.y,chi.x));

Z.x = 0.5*(co*sq + co/sq);
Z.y = 0.5*si*sq;
Run Code Online (Sandbox Code Playgroud)

其中chi和Z是简单的结构,其中x和y为成员.

2)使用复杂:

Z = 0.5 * (chi + (1.0 / chi));
Run Code Online (Sandbox Code Playgroud)

Z和chi很复杂.有趣的是,确实情况1)更快(约20%),但精度差,在逆变换后的逗号后面的第三个十进制数中给出错误,而复数返回确切的数字.那么,问题在于cos(atan2),sin(atan2)?但如果是的话,复合体如何处理呢?

编辑:刚才发现这不是我想到的问题.我必须做一般转型,如

Z = 1/2*(chi ^ n +(1/chi)^ n),到目前为止,上面的代码是我想要的方式.更确切地说,

    double sq = pow(sqrt(r2),n); //way faster!
double co = cos(n*atan2(chi.y,chi.x));
double si = sin(n*atan2(chi.y,chi.x));

Z.x = 0.5*(co*sq + co/sq);
Z.y = …
Run Code Online (Sandbox Code Playgroud)

c++ performance numbers complex-numbers atan2

0
推荐指数
1
解决办法
2344
查看次数

为什么-π<atan2(y,x)≤π而对于线我们真的只需要从0到π?

可能重复:
c ++中atan和atan2有什么区别?

为什么-π<atan2(y,x)≤π而对于线我们真的只需要从0到π,什么有api像atan2但是会从0返回到pi?

c c++ atan2

0
推荐指数
1
解决办法
470
查看次数

C++ 从 Atan 创建 Atan2

我将如何着手将我的atan职能纳入其中atan2?例如

float myAtan2(double a, double b)
{
    float atan2val = //calculate atan2 using atan
    return atan2val;
}
Run Code Online (Sandbox Code Playgroud)

抱歉,我不是最擅长三角学!

c++ math trigonometry atan2

0
推荐指数
1
解决办法
2957
查看次数

标签 统计

atan2 ×7

c++ ×4

c ×2

math ×2

phase ×2

complex-numbers ×1

embedded ×1

fft ×1

ios ×1

matlab ×1

numbers ×1

performance ×1

trigonometry ×1