gpt4 book ai didi

Android 陀螺仪与加速度计

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:12 26 4
gpt4 key购买 nike

我正在开发一款 Android 游戏,我想弄清楚用户是将设备向左倾斜还是向右倾斜(类似于将人左右移动时 Temple Run 的工作原理)。

我已经阅读了许多教程和示例并制作了示例应用程序,但我从陀螺仪和加速度计返回的数据量非常大。我是否需要两组硬件来确定用户是否倾斜设备以及朝哪个方向倾斜?

我当前的应用程序正在检测每一个轻微的运动,这显然是不正确的。

public class Main extends Activity {

private SensorManager mSensorManager;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity
private RelativeLayout background;
private Boolean isleft = true;
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.background = (RelativeLayout) findViewById(R.id.RelativeLayout1);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;

/* float x1, x2, y1, y2;
String direction;
switch(event.getAction()) {
case(MotionEvent.ACTION_DOWN):
x1 = event.getX();
y1 = event.getY();
break;
case(MotionEvent.ACTION_UP) {
x2 = event.getX();
y2 = event.getY();
float dx = x2-x1;
float dy = y2-y1;

// Use dx and dy to determine the direction
if(Math.abs(dx) > Math.abs(dy)) {
if(dx>0) directiion = "right";
else direction = "left";
} else {
if(dy>0) direction = "down";
else direction = "up";
}
}
}*/
}

private final SensorEventListener mSensorListener = new SensorEventListener() {

public void onSensorChanged(SensorEvent se) {

float x = se.values[0];
float y = se.values[1];
float z = se.values[2];

if((mAccelLast<mAccelCurrent)&&(isleft == true)){
background.setBackgroundResource(R.drawable.bg_right);
isleft = false;
}
if((mAccelLast>mAccelCurrent)&&(isleft == false)){
background.setBackgroundResource(R.drawable.bg_left);
isleft = true;
}
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = mAccelCurrent - mAccelLast;
Log.d("FB", "delta : "+delta);
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
// Log.d("FB", "mAccel : "+mAccel);

}

我只使用加速度计、陀螺仪会更好还是两者都需要?

最佳答案

这篇文章链接到两者之间的区别:Android accelerometer and gyroscope

http://diydrones.com/profiles/blogs/faq-whats-the-difference

http://answers.oreilly.com/topic/1751-mobile-accelerometers-and-gyroscopes-explained/

文档也有帮助:http://developer.android.com/guide/topics/sensors/sensors_motion.html

根据我非常有限的经验,陀螺仪不断测量 x、y、z 旋转并不断更新。用于在游戏中驾驶汽车/飞机/角色。加速度计有点像 Wii-mote,用于摆动或拾取摇动手势。

关于Android 陀螺仪与加速度计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com