从加速度计,是否可以获得仰角?对于那些不知道的人,仰角是:
加速度计测量可以实现吗?
答案 0 :(得分:2)
测量运动时,通常没有方向概念。测量静态加速度(由于重力引起的加速度)的多轴加速度计可以用于计算相对于地球的角度。
大多数手机都带有许多传感器,如陀螺仪等可以连接的传感器。请参阅SensorManager的javadoc和各种类型的SensorEvents。
答案 1 :(得分:1)
由于你不知道用户在哪里,所以不可能将“仰角”变为视线......
您可以做的是假设用户将设备的屏幕直接朝向他的眼睛。
根据这个假设,您可以使用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。
如果您希望整个源包中包含sensorimulator所需的几个工具,请给我发电子邮件,我已将其全部打包。
您可以从罗盘中获取磁力数据,而不是制作磁力数据。
你要找的是音调,它在orientation[1]
中,它在-pi / 2和pi / 2之间变化。
希望有所帮助。