大佬教程收集整理的这篇文章主要介绍了android – 线性加速方向,用于跟踪手机的上下移动,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>线性加速度由传感器TYPE_LINEAR_ACCELERATION给出,轴是电话轴,因此跟踪任何特定轴都没有区别.
>我尝试应用转置或旋转矢量的倒数(旋转矢量的反转或转置相同),然后尝试跟踪线性加速度矢量的z方向.似乎没有帮助.
>我正在尝试使用重力值(TYPE_GRAVITY)来制作点积,以获得加速度的方向,但它似乎@R_536_10197@.即使我快速移动我的设备,它也会说下降.
dotProduct = vectorA[0]*vectorB[0]+vectorA[1]*vectorB[1] + vectorA[2]*vectorB[2]; cosineVal = dotProduct/(|vectorA|*|vectorB|) if(cosineVal > 0 ) down else Up.
这种方法有什么缺陷?请帮助,我已经坚持了一段时间了.
也许你可以从https://developer.android.com/reference/android/hardware/SensorEvent.html#values获得Sensor.TYPE_ACCELEROMETER的矢量,你有重力矢量和加速度矢量.
我在下面制作了一个代码片段,你可以试试.
public class MainActivity extends AppCompatActivity implements SensorEventListener { private float[] gravity = new float[3]; private float[] linear_acceleration = new float[3]; @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.activity_main); SensoRMANager mSensoRMANager = (SensoRMANager) getSystemservice(SENSOR_serviCE); Sensor mAccelerometer = mSensoRMANager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mSensoRMANager.registerListener(this,mAccelerometer,SensoRMANager.SENSOR_DELAY_NORMAL); } @Override public void onSensorChanged(SensorEvent event) { // alpha is calculated as t / (t + dT) // with t,the low-pass filter's time-constant // and dT,the event delivery rate final float alpha = 0.8f; gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; gravitY[1] = alpha * gravitY[1] + (1 - alpha) * event.values[1]; gravitY[2] = alpha * gravitY[2] + (1 - alpha) * event.values[2]; linear_acceleration[0] = event.values[0] - gravity[0]; linear_acceleration[1] = event.values[1] - gravitY[1]; linear_acceleration[2] = event.values[2] - gravitY[2]; float scalarProduct = gravity[0] * linear_acceleration[0] + gravitY[1] * linear_acceleration[1] + gravitY[2] * linear_acceleration[2]; float gravityVectorLength = (float) Math.sqrt(gravity[0] * gravity[0] + gravitY[1] * gravitY[1] + gravitY[2] * gravitY[2]); float lianearAccVectorLength = (float) Math.sqrt(linear_acceleration[0] * linear_acceleration[0] + linear_acceleration[1] * linear_acceleration[1] + linear_acceleration[2] * linear_acceleration[2]); float cosVectorAngle = scalarProduct / (gravityVectorLength * lianearAccVectorLength); TextView tv = (TextView) findViewById(R.id.tv); if (lianearAccVectorLength > 2) {//increase to detect only bigger accelerations,decrease to make detection more sensitive but noisy if (cosVectorAngle > 0.5) { tv.setText("Down"); } else if (cosVectorAngle < -0.5) { tv.setText("Up"); } } } @Override public void onAccuracyChanged(Sensor sensor,int i) { } }
以上是大佬教程为你收集整理的android – 线性加速方向,用于跟踪手机的上下移动全部内容,希望文章能够帮你解决android – 线性加速方向,用于跟踪手机的上下移动所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。