获取phone角度(俯仰)
Get phone angle (pitch)
我真的希望有人能帮助我:
我正在开发一个 Android 应用程序,它显示 phone 的角度
我正在使用此代码:
protected void onCreate(Bundle savedInstanceState)
{
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mAccelerometer,100000);
mSensorManager.registerListener(this, mMagnetometer, 100000);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = lowPass(event.values.clone(), mGravity);
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mGeomagnetic = lowPass(event.values.clone(), mGeomagnetic);
if (mGravity != null && mGeomagnetic != null) {
boolean success = SensorManager.getRotationMatrix(Ra, Ia, mGravity, mGeomagnetic);
if (success) {
SensorManager.getOrientation(Ra, orientation);
float tempxGy = (orientation[0]);// az
float tempyGy = (orientation[1]);// pitch
float tempzGy = (orientation[2]); //roll
}
我正在进一步处理我在这里得到的值,但这不是这里的问题。
当 phone 与 table 持平时,值如下所示:
roll -0,018
球场 0,024
偏航 2,51
这对我来说很好(如果我将值转换为欧拉角)
现在假设我从 table 中取出 phone - phone 的底部(微型 USB 端口所在的位置)保留在 table 上并且我用相机掀边
音高的值越来越负 - 直到音高达到 -1.53(欧拉中的 -90)一旦达到该值,值就会再次增加,如果 phone 是在 table 上,显示器面向 table,音调再次回到 0。
问题是,我必须区分这两个值(例如 -1 和 -1
我该怎么做?滚动不是问题,因为滚动最大 180 度,而不是这个 90 度问题..
真心希望你能帮帮我!
所以
if(mGravity[2]<0) orientation[1] = (float) (Math.PI + orientation[1]);
足以获得我需要的值 --- 但现在我有一个新问题 - 我想重新映射坐标系,所以当 phone 在 table 上,如果 phone 站在微型 USB 端口
上,则为 +90
我试过了
SensorManager.remapCoordinateSystem(Ra, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, Ri);
但是现在翻转和俯仰被交换了 --- 我需要做什么才能简单地获得正俯仰值,只要显示器朝上,如果显示器朝下,则获得负值?
重新映射是不是错误的想法,我可以通过做其他事情来简化它吗?
我真的希望有人能帮助我: 我正在开发一个 Android 应用程序,它显示 phone 的角度
我正在使用此代码:
protected void onCreate(Bundle savedInstanceState)
{
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mAccelerometer,100000);
mSensorManager.registerListener(this, mMagnetometer, 100000);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = lowPass(event.values.clone(), mGravity);
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mGeomagnetic = lowPass(event.values.clone(), mGeomagnetic);
if (mGravity != null && mGeomagnetic != null) {
boolean success = SensorManager.getRotationMatrix(Ra, Ia, mGravity, mGeomagnetic);
if (success) {
SensorManager.getOrientation(Ra, orientation);
float tempxGy = (orientation[0]);// az
float tempyGy = (orientation[1]);// pitch
float tempzGy = (orientation[2]); //roll
}
我正在进一步处理我在这里得到的值,但这不是这里的问题。
当 phone 与 table 持平时,值如下所示:
roll -0,018
球场 0,024
偏航 2,51
这对我来说很好(如果我将值转换为欧拉角)
现在假设我从 table 中取出 phone - phone 的底部(微型 USB 端口所在的位置)保留在 table 上并且我用相机掀边
音高的值越来越负 - 直到音高达到 -1.53(欧拉中的 -90)一旦达到该值,值就会再次增加,如果 phone 是在 table 上,显示器面向 table,音调再次回到 0。 问题是,我必须区分这两个值(例如 -1 和 -1
我该怎么做?滚动不是问题,因为滚动最大 180 度,而不是这个 90 度问题..
真心希望你能帮帮我!
所以
if(mGravity[2]<0) orientation[1] = (float) (Math.PI + orientation[1]);
足以获得我需要的值 --- 但现在我有一个新问题 - 我想重新映射坐标系,所以当 phone 在 table 上,如果 phone 站在微型 USB 端口
上,则为 +90我试过了
SensorManager.remapCoordinateSystem(Ra, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, Ri);
但是现在翻转和俯仰被交换了 --- 我需要做什么才能简单地获得正俯仰值,只要显示器朝上,如果显示器朝下,则获得负值?
重新映射是不是错误的想法,我可以通过做其他事情来简化它吗?