小编Kin*_*pin的帖子

使用atan2将范围从-1到1转换为度

我正在尝试使用atan2将范围从-1到1转换为弧度,然后从弧度转换为度。

但是atan2(0,1)等于0时应等于90.0我在这里做错了什么?

float radians = atan2(0, 1);
float degrees = (radians * 180 / PI);
if(radians < 0)
{
    degrees += 360;
}
Run Code Online (Sandbox Code Playgroud)

编辑:好的,所以这次我以正确的方式插入了这些值。

float xaxisval = controller->left_stick_x_axis();
float yaxisval = controller->left_stick_y_axis();

// plug values into atan2
float radians = atan2(yaxisval, xaxisval);
float degrees = (radians * 180 / PI);
if (radians < 0)
{
    degrees += 360;
}
Run Code Online (Sandbox Code Playgroud)

对于上下文,xaxisval和yaxisval从模拟摇杆中获取一个值,其最大值在右边1,最小值在-1左边。因此,当我向右按模拟摇杆时,yaxisval等于0,xaxisval等于1。

这应该返回90度,就像您将模拟摇杆想象为完整的360度圆一样。上方向是360/0,右方向是90,下方向是180,左方向是270,依此类推。

我将这些值粘贴到调试器中,这就是它返回的结果。

xaxisval: 1.00000
yaxisval: 0.00000
degrees: 0.00000
Run Code Online (Sandbox Code Playgroud)

但是我希望这个方向上升到90度,它似乎已经上升了90度,我测试了下降位置,它等于90。有什么建议吗?

调试输出:操纵杆向上位置

xaxisval: 0.00000
yaxisval: -1.00000
degrees: 270.00000
Run Code Online (Sandbox Code Playgroud)

操纵杆右位置

xaxisval: 1.00000
yaxisval: …
Run Code Online (Sandbox Code Playgroud)

c++ math atan

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

如何在for循环中运行并行线程(C++)

for (int i = 0; i < 16; i++)
{
    thread myThread(compute_mandelbrot, -2.0, 1.0, 1.125, -1.125, ystart, yend);
    ystart = ystart + 30;
    yend = yend + 30;
    myThread.join();
}
Run Code Online (Sandbox Code Playgroud)

我本质上想要并行运行16个线程,每个线程渲染一个mandelbrot图像.我没有看到我如何实现这是在一个for循环中,因为我必须等待线程在创建新线程之前完成.

有没有办法让我运行并行线程而不必一个接一个地创建16个线程?

c++ multithreading

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

标签 统计

c++ ×2

atan ×1

math ×1

multithreading ×1