获得仰角?

时间:2011-03-12 18:23:18

标签: java android math accelerometer

从加速度计,是否可以获得仰角?对于那些不知道的人,仰角是:
angle of elevation
加速度计测量可以实现吗?

2 个答案:

答案 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之间变化。

希望有所帮助。