android 定位获取方向,Android

我正在製作從攝像機上顯示物體的程序,這幾乎很好的除了垂直向左和右邊的( 如在 80 -110和 260度) 。 在其他+-320度中,它。 我曾嘗試使用TYPE_ROTATION_VECTOR和加速度計與磁強計,它們具有相同的結果。 誰知道什麼解決方案?

使用 TYPE_ROTATION_VECTOR:if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)

{

float[] roationV = new float[16];

SensorManager.getRotationMatrixFromVector(roationV, event.values);

float[] orientationValuesV = new float[3];

SensorManager.getOrientation(roationV, orientationValuesV);

tvHeading.setText(String.format(

"Coordinates: lat = %1$.2f, lon = %2$.2f, time = %3$.2f",

orientationValuesV[0], orientationValuesV[1], orientationValuesV[2]));

float[] rotationMatrix=new float[16];

mSensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);

float[] orientationValues = new float[3];

SensorManager.getOrientation(rotationMatrix, orientationValues);

double azimuth = Math.toDegrees(orientationValues[0]);

double pitch = Math.toDegrees(orientationValues[1]);

double roll = Math.toDegrees(orientationValues[2]);

tvOrientation.setText(String.format(

"Coordinates: lat = %1$.2f, lon = %2$.2f, time = %3$.2f",

azimuth,pitch,roll));

}

使用 accelerometer+magnetometerif (event.sensor == mAccelerometer) {

System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);

mLastAccelerometer = meanFilterAccelSmoothing

. addSamples(mLastAccelerometer);

mLastAccelerometer = medianFilterAccelSmoothing

. addSamples(mLastAccelerometer);

for (int i = 0; i

mLastAccelerometer[i] = (float) Math.floor(mLastAccelerometer[i] * 1000)/1000;

}

mLastAccelerometerSet = true;

}

if (event.sensor == mMagnetometer) {

System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);

mLastMagnetometer = meanFilterMagneticSmoothing.addSamples(mLastMagnetometer);

mLastMagnetometer = medianFilterMagneticSmoothing.addSamples(mLastMagnetometer);

for (int i = 0; i

mLastMagnetometer[i] = (float) Math.floor(mLastMagnetometer[i] * 1000)/1000;

}

mLastMagnetometerSet = true;

}

if (mLastAccelerometerSet && mLastMagnetometerSet) {

SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);

SensorManager.getOrientation(mR, mOrientation);

if (angeles.size()> 0) {

for (int i = 0; i

compassFunc(i, mOrientation[0], mOrientation[1], mOrientation[2]);

}

}

private void compassFunc(int number, float... values) {

double angularXSpeed = Math.floor(values[0] * 180/Math.PI * 100)/100;

double angularYSpeed = Math.floor(values[1] * 180/Math.PI * 100)/100;

double angularZSpeed = Math.floor(values[2] * 180/Math.PI * 100)/100;

tvOrientation.setText(String.format(

"Screen: lt= %1$.2f : %2$.2f,rt= %3$.2f : %4$.2f,lb= %5$.2f : %6$.2f,rb= %7$.2f : %8$.2f",

xLeftTop, yLeftTop, xRightTop,yRightTop,xLeftBottom,yLeftBottom,xRightBottom,yRightBottom));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值