【发布时间】:2011-07-14 03:48:42
【问题描述】:
从加速度计,是否可以得到仰角?不知道的小伙伴们,仰角是:
加速度计测量可以做到这一点吗?
【问题讨论】:
标签: java android math accelerometer
从加速度计,是否可以得到仰角?不知道的小伙伴们,仰角是:
加速度计测量可以做到这一点吗?
【问题讨论】:
标签: java android math accelerometer
在测量运动时,通常没有方向的概念。测量静态加速度(重力加速度)的多轴加速度计可用于计算相对于地球的角度。
大多数安卓手机都带有许多可以接口的传感器,例如陀螺仪等。请参阅 SensorManager 和各种类型的 SensorEvents 的 javadocs。
【讨论】:
实际上不可能获得视线的“仰角”,因为您不知道用户在哪里...
您可以做的是假设用户将设备的屏幕直接对准他的眼睛。
有了这个假设,您可以使用http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[]) 来获取设备的方向并获取 y 轴和 (x,z) 平面之间的角度。
它的作用是使用3轴上的加速度计来查看重力的方向。
这仅在设备静止时有效。如果您需要更好地处理运动,则应使用设备中存在的陀螺仪。
另一件事是,根据您的应用程序,您可能需要查看一些增强现实框架,如果这是您正在研究的应用程序类型。
编辑:这是我整理的一些代码。 我的代码中的主要功能是:
public void onSensorChanged(SensorEvent event) {
int sensor = event.type;
float[] values = event.values;
int i;
StringBuffer str=new StringBuffer();
// do something with the sensor data
TextView text = (TextView) findViewById(R.id.my_text);
float[] R = new float[9]; // rotation matrix
float[] magnetic = new float[3];
float[] orientation = new float[3];
magnetic[0]=0;
magnetic[1]=1;
magnetic[2]=0;
str.append("From Sensor :\n");
for(i=0;i<values.length; i++) {
str.append(values[i]);
str.append(", ");
}
SensorManager.getRotationMatrix(R, null, values, magnetic);
SensorManager.getOrientation(R, orientation);
str.append("\n\nGives :\n");
for(i=0;i<orientation.length; i++) {
str.append(orientation[i]);
str.append(", ");
}
text.setText(str);
}
我没有在真机上尝试,只在模拟器上使用SensorSimulator。
如果您想要包含传感器模拟器所需的几个工具的整个源代码包,请给我发电子邮件,我已经打包好了。
您实际上可以从指南针中获取磁数据,而不是制作磁数据。
您正在寻找的是音高,在orientation[1],它在 -pi/2 和 pi/2 之间变化。
希望对您有所帮助。
【讨论】: