小编Ily*_*lya的帖子

当弧度很大时,为什么这个sin cos查表表不准确?

我想创建一个sin cos查找表进行优化,使用从0到0的数组索引UCHAR_MAX,这样0弧度就是索引0,pi/2radian是UCHAR_MAX/4:

sincos.h

#include <limits.h>
#include <math.h>
int sini[UCHAR_MAX];
int cosi[UCHAR_MAX];
#define MAGNIFICATION 256
#define SIN(i) sini[i]/MAGNIFICATION
#define COS(i) cosi[i]/MAGNIFICATION

void initTable(){
    for(int i=0;i<UCHAR_MAX;i++){
        sini[i]=sinf(i*2*M_PI/UCHAR_MAX)*MAGNIFICATION;
        cosi[i]=cosf(i*2*M_PI/UCHAR_MAX)*MAGNIFICATION;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用UCHAR_MAXas max 的原因是我想充分利用unsigned char overflow来模拟从0到2*pi只变化的弧度:例如,如果radian的值是2*pi,则数组的索引变为UCHAR_MAX,因为它溢出,它自动变为0并且不需要mod(如果我使用0到360作为域,我可能index%360每次都需要计算).然后我用一些弧度值测试它:

float rad[]={2.0f,4.0f,6.0f,8.0f,10.0f,-2.0f,-4.0f,-6.0f,-8.0f,-10.0f};
Run Code Online (Sandbox Code Playgroud)

如下:

#include "sincos.h"
#include <stdio.h>
int main(){
    initTable();
    unsigned char radToIndex;
    float rad[]={2.0f,4.0f,6.0f,8.0f,10.0f,-2.0f,-4.0f,-6.0f,-8.0f,-10.0f};
    int scalar=123;
    printf("scalar=%d\n",scalar);
    for(int i=0;i<sizeof(rad)/sizeof(float);i++){
        radToIndex=rad[i]*UCHAR_MAX/2/M_PI;
        printf("%d*sin(%f) : %f , %d\n",scalar,rad[i],scalar*sinf(rad[i]),scalar*SIN(radToIndex));
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我测试了表 …

c arrays math trigonometry

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

使用QAudioInput在linux中录制并在Windows中播放

为了我的目的,我想以原始格式(仅样本),8kHz,16bit(小端)和1个通道录制声音.然后,我想将这些样本传输到窗口并使用QAudioOutput播放它.所以我有两个独立的程序:一个用于使用QAudioInput录制语音,另一个用于提供包含一些样本的文件,然后我用QAudioOutput播放它.下面是我创建QAudioInput和QAudioOutput的源代码.

//Initialize audio
void AudioBuffer::initializeAudio()
{
  m_format.setFrequency(8000); //set frequency to 8000
  m_format.setChannels(1); //set channels to mono
  m_format.setSampleSize(16); //set sample sze to 16 bit
  m_format.setSampleType(QAudioFormat::UnSignedInt ); //Sample type as usigned integer sample
  m_format.setByteOrder(QAudioFormat::LittleEndian); //Byte order
  m_format.setCodec("audio/pcm"); //set codec as simple audio/pcm

  QAudioDeviceInfo infoIn(QAudioDeviceInfo::defaultInputDevice());
  if (!infoIn.isFormatSupported(m_format))
  {
      //Default format not supported - trying to use nearest
      m_format = infoIn.nearestFormat(m_format);
  }

  QAudioDeviceInfo infoOut(QAudioDeviceInfo::defaultOutputDevice());

  if (!infoOut.isFormatSupported(m_format))
  {
     //Default format not supported - trying to use nearest
     m_format = infoOut.nearestFormat(m_format);
  }
  createAudioInput();
  createAudioOutput();
}

void …
Run Code Online (Sandbox Code Playgroud)

c++ audio qt alsa

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

QTableView:如何在开始/结束编辑时执行某些操作?

当用户启动并结束QTableView窗口小部件单元格编辑时,是否有任何信号(我在文档中找不到任何内容)?

我想从表模型执行一些功能,然后用户开始编辑eny单元格,并在用户结束编辑时执行另一个功能.我怎样才能做到这一点?

c++ qt qtableview

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

在QTableWidget中分别处理单击和双击

QTableWidget我的应用程序中有一个小部件。我必须在我的应用程序中分别处理单击和双击鼠标事件。现在,即使我双击一个单元格,也只调用一次单击槽。如何分别处理?

以下是信号插槽连接的代码:

connect(ui.tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(myCellClicked(int, int)));
connect(ui.tableWidget, SIGNAL(itemDoubleClicked(QTableWidgetItem*)), this, SLOT(tableItemClicked(QTableWidgetItem*)));
Run Code Online (Sandbox Code Playgroud)

我在这里缺少任何其他配置吗?

qt

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

批量击键

我正在批量制作基于文本的游戏,我想知道如果玩家按下向上箭头键是否可以完成任务?我浏览了帮助文件,并进行了Google搜索,但没有解决方案。因为使用Windows RT设备,所以无法安装任何其他软件。另外,如果不能批量完成,可以在VBS或Powershell中完成吗?

batch-file keystroke

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

org.json.JSONException: 没有名称值

以下代码中出现此错误的原因可能是什么?

loginButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick (View v){
                final String e_mail = e_mailEditText.getText().toString();
                final String password = passwordEditText.getText().toString();

                // Response received from the server
                Response.Listener<String> responseListener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonResponse = new JSONObject(response);
                            boolean success = jsonResponse.getBoolean("success");

                            if (success) {
                                String name = jsonResponse.getString("name");
                                //  int age = jsonResponse.getInt("age");

                                Intent intent = new Intent(login.this, Welcome.class);
                                intent.putExtra("name", name);
                                // intent.putExtra("age", age);
                                intent.putExtra("e_mail", e_mail);
                                login.this.startActivity(intent);
                            } else {
                                AlertDialog.Builder builder …
Run Code Online (Sandbox Code Playgroud)

json android-studio

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

C++ while循环无法启动

因此,我们的想法是向用户询问数组的每个元素,但在为第一个问题(它要求元素数量)提供输入后,没有任何反应.无法弄清楚为什么.

#include <iostream>

int main()
{
        int numGrades;
        tryAgain:
        std::cout << "Enter number of grades" << std::endl;
        std::cin >> numGrades;

            if (numGrades > 30)
                {
                std::cout << "Please enter a valid number of grades" << std::endl;
                goto tryAgain;
                }


        int grades[numGrades - 1];
        int gradeCount = 0;
        while (gradeCount < numGrades);
            {
            std::cout << "Enter grade number" << gradeCount + 1 << ":";
            std::cin >> grades[gradeCount];

            ++ gradeCount;
            }   

        std::cout << grades;
        return 0;   
}
Run Code Online (Sandbox Code Playgroud)

c++ while-loop

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

如何在Qt中设置QTableWidget背景透明?

我正在开发一个我正在使用QTableWidgets的应用程序,我需要将其背景设置为透明,我已尝试setStyleSheet "background:transparent;"从形式,但没有任何反应,有没有其他方法可以做到这一点?我发布了截图

在此输入图像描述

qt transparency background qtablewidget

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

调用操纵ostream的函数不需要括号.C++

我知道没有括号就不能调用函数,但是,假设我有这段源代码:

#include<iostream>
using namespace std;

ostream& test(ostream& os){
os.setf(ios_base::floatfield);
return os;
}

int main(){
cout<<endl<<scientific<<111.123456789;
cout<<endl<<test<<111.123456789;
}

   /// Output:
   /// 1.11235e+002
   /// 111.123
Run Code Online (Sandbox Code Playgroud)

没有左移位运算符重载任何,但是当我打电话的test(ostream& os)功能中coutmain功能,它不需要任何括号.我的问题是为什么?

c++ function ostream manipulators operator-keyword

3
推荐指数
2
解决办法
153
查看次数

QTemporaryFile是空的

我想在Qt项目中使用临时文件

我试试这段代码:

QTemporaryFile file;
file.open();
QTextStream stream(&file);
stream << content; // content is a QString

qDebug() << file.readAll();
Run Code Online (Sandbox Code Playgroud)

但控制台显示一个空字符串:

""
Run Code Online (Sandbox Code Playgroud)

我怎么能写一个字符串QTemporaryFile

c++ qt temporary-files

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