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