Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是什么原因导致在不同角度获得完全相同的三角函数输出_C++_Opencv_Cmath - Fatal编程技术网

C++ 是什么原因导致在不同角度获得完全相同的三角函数输出

C++ 是什么原因导致在不同角度获得完全相同的三角函数输出,c++,opencv,cmath,C++,Opencv,Cmath,尝试使用circle()(围绕its绘制一个填充圆)手动绘制一条线,稍微更新其中心变量(即图像上的坐标)。更新通过将sin(a)和cos(a)添加到平面的X和Y来实现,其中“a”是角度。这样: //这是一个多线程应用程序。 //另一个函数的一部分,其中我更新“angle”变量 // ............ if(buffer.modified())//如果修改了缓冲区 { 对于(int k=0;k0) { 大小=缓冲区。数据[k]; 角度=k; 打破 } } buffer.unmodify()

尝试使用
circle()
(围绕its绘制一个填充圆)手动绘制一条线,稍微更新其中心变量(即图像上的坐标)。更新通过将sin(a)和cos(a)添加到平面的X和Y来实现,其中“a”是角度。这样:

//这是一个多线程应用程序。
//另一个函数的一部分,其中我更新“angle”变量
// ............
if(buffer.modified())//如果修改了缓冲区
{
对于(int k=0;k0)
{
大小=缓冲区。数据[k];
角度=k;
打破
}
}
buffer.unmodify();//禁用标志
画线(尺寸、角度);
}
// ............
// ............
//无限循环中的draw_line()函数
// ............
//circle()函数在这里
// ............
//更新坐标
x_坐标+=sin(角度*pi/180);
y_坐标+=cos(角度*pi/180);
//更新圆()的中心点
image.start.x=x_坐标;
image.start.y=y_坐标;
//显示结果

cout在输入角度并从中计算角度*pi/180
的代码部分有一些错误。对于60度,确实
角度*pi/180
为1.0472。对于示例输出-70、80、90中的其他角度,显然没有再次计算该角度,并且保持在1.0472。我不知道为什么-粘贴的示例代码显然不是打印您显示的调试输出的代码(例如,粘贴的代码中没有任何内容打印“输入角度”或设置它)。

发现负责缓冲区更新的线程使用
mutex.lock()锁定缓冲区
之后,它需要更新输入,最近将绘制输入。当状态被锁定时,我强制它绘制(这意味着它应该更新角度)。由于无法更新角度,因此解决方案是仅在缓冲区同时解锁和修改后绘制。

请用or来回答您的问题。在我看来,最有可能的罪魁祸首是
角度
没有实际更新。代码不会在0度和60度以上更新。当得到负变量时,会有某种程度的断裂。这是一个非常糟糕的问题。好像调试得不够。只是因为有人认为从弧度到sin,cos的转换可能会出错。@Navad,谢谢你的回答。我更新了一些小输出。顺便说一句,如果输入角度为30,60,然后再输入30,我就可以了。但60岁以上的人都是一样的。
//THE OUTPUT

input angle: 30
cos(0.523599)=0.866025    sin(0.523599)=0.5

input angle: 60
cos(1.0472)=0.5    sin(1.0472)=0.866025

input angle: 70
cos(1.0472)=0.5    sin(1.0472)=0.866025


input angle: 80
cos(1.0472)=0.5    sin(1.0472)=0.866025

input angle: 90
cos(1.0472)=0.5    sin(1.0472)=0.866025