Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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++ 如何使光标在MFC中的移动更加顺畅?_C++_Mfc_Mouseevent - Fatal编程技术网

C++ 如何使光标在MFC中的移动更加顺畅?

C++ 如何使光标在MFC中的移动更加顺畅?,c++,mfc,mouseevent,C++,Mfc,Mouseevent,我正在尝试使用Myo移动鼠标光标 我做了,但效果并不完美 我知道在这段代码中,Myo的每一次移动都只移动光标5个像素 我想改进这段代码,使其移动更像真正的鼠标。 (但不是这样:点x+500;) 准确性和覆盖率都很重要。 由于Myo的移动很小,我想将光标从显示器的左端移动到右端。(我的意思是0~65535。)同时,我想保持准确性(为了方便点击操作) 在此代码中 比较俯仰表示上一个俯仰值 比较偏航表示以前的偏航值 if(compare_pitch < collector.pitch_w) {

我正在尝试使用Myo移动鼠标光标

我做了,但效果并不完美

我知道在这段代码中,Myo的每一次移动都只移动光标5个像素

我想改进这段代码,使其移动更像真正的鼠标。 (但不是这样:点x+500;)

准确性和覆盖率都很重要。 由于Myo的移动很小,我想将光标从显示器的左端移动到右端。(我的意思是0~65535。)同时,我想保持准确性(为了方便点击操作)

在此代码中

  • 比较俯仰表示上一个俯仰值

  • 比较偏航表示以前的偏航值

    if(compare_pitch < collector.pitch_w) { 
        point.y += 5; // Move Cursor Right
    
    }
    if(compare_pitch > collector.pitch_w)   
        point.y -= 5; // Move Cursor Left
    
    }
    if(compare_yaw < collector.yaw_w) {
        point.x -= 5; // Move Cursor Up
    
    }
    if(compare_yaw > collector.yaw_w) { 
        point.x += 5;// Move Cursor Down
    }
    
    SetCursorPos(point.x, point.y);
    compare_pitch = collector.pitch_w;
    compare_yaw = collector.yaw_w;
    
    if(比较音高收集器俯仰)
    点y-=5;//向左移动光标
    }
    如果(比较偏航<收集器偏航){
    point.x-=5;//向上移动光标
    }
    如果(比较偏航>收集器偏航){
    point.x+=5;//向下移动光标
    }
    SetCursorPos(点x,点y);
    比较_节距=收集器.pitch_w;
    比较_偏航=收集器。偏航_w;
    

下面是collector.pitch_w和collector.yaw_w的函数。 (我没有使用roll_w。)

//onOrientationData()在Myo设备提供其当前方向时调用,该方向表示为
//作为一个单位四元数。
void onOrientationData(myo::myo*myo,uint64_t时间戳,常量myo::四元数和四元数)
{
使用std::atan2;
使用std::asin;
使用std::sqrt;
使用std::max;
使用std::min;
//从单位四元数计算欧拉角(横摇、俯仰和偏航)。
浮动辊=atan2(2.0f*(四元w()*四元x()+四元y()*四元z()),
1.0f-2.0f*(quat.x()*quat.x()+quat.y()*quat.y());
浮动节距=asin(最大(-1.0f,最小(1.0f,2.0f*(四元w()*四元y()-四元z()*四元x()));
浮动偏航=atan2(2.0f*(四元w()*四元z()+四元x()*四元y()),
1.0f-2.0f*(四元y()*四元y()+四元z()*四元z());
//将以弧度为单位的浮点角度转换为从0到100的比例。
滚转w=静态浇铸((滚转+(浮动)M_-PI)/(M_-PI*2.0f)*100);
俯仰w=静态俯仰((俯仰+(浮动)M_PI/2.0f)/M_PI*100);
偏航w=静态抛投((偏航+(浮动)M_-PI)/(M_-PI*2.0f)*100);
}

请给我一些建议。多谢各位

我的想法是使用加速度

我的想法是使用差异
compare\u pitch-collector.pitch\u w
compare\u yaw-collector.yaw\u w
。如果手移动得很快,那么这个差异就会增加。根据此差异加速指针位置的更改

point.y += (int)((collector.pitch_w - compare_pitch ) * some_constant_value)
point.x += (int)((collector.yaw_w - compare_yaw) * some_constant_value)
point.y += (int)((collector.pitch_w - compare_pitch ) * some_constant_value)
point.x += (int)((collector.yaw_w - compare_yaw) * some_constant_value)