我正在从我的设备获取各种传感器读数(编程为android),我希望将滚动(这似乎是一个数字1-100)转换为角度,并将磁力计转换为度数..
任何简单的方程都会受到赞赏..我的几何学是一个短暂的记忆......
public void onSensorChanged(SensorEvent evt) {
int type=evt.sensor.getType();
if(type == Sensor.TYPE_ORIENTATION){
azimuth = evt.values[0]; // azimuth rotation around the z-axis
pitch = evt.values[1]; // pitch rotation around the x-axis
roll = evt.values[2]; // roll rotation around the y-axis
}
//Smoothing the sensor data a bit seems like a good idea.
if (type == Sensor.TYPE_MAGNETIC_FIELD) {
orientation[0]=(orientation[0]*1+evt.values[0])*0.5f;
orientation[1]=(orientation[1]*1+evt.values[1])*0.5f;
orientation[2]=(orientation[2]*1+evt.values[2])*0.5f;
} else if (type == Sensor.TYPE_ACCELEROMETER) {
acceleration[0]=(acceleration[0]*2+evt.values[0])*0.33334f;
acceleration[1]=(acceleration[1]*2+evt.values[1])*0.33334f;
acceleration[2]=(acceleration[2]*2+evt.values[2])*0.33334f;
}
if ((type==Sensor.TYPE_MAGNETIC_FIELD) || (type==Sensor.TYPE_ACCELEROMETER)) {
float newMat[]=new float[16];
//Toast toast = Toast.makeText(ctx.getApplicationContext(), "accel", Toast.LENGTH_SHORT);
//toast.show();
SensorManager.getRotationMatrix(newMat, null, acceleration, orientation);
if(displayOri==0||displayOri==2){
SensorManager.remapCoordinateSystem(newMat,SensorManager.AXIS_X*-1, SensorManager.AXIS_MINUS_Y*-1,newMat);
}else{
SensorManager.remapCoordinateSystem(newMat,SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X,newMat);
}
matrix=newMat;
}
}
我应该补充一点,我不确定我只想要滚动...我的应用程序锁定在横向模式但显然用户可以将他们的手机转到任何访问的任何角度..所以我可能需要以上所有三个来获得我正在寻找的角度。
有问题的角度就好像用户正在通过他们的手机查看,无论他们如何握住它,在现实世界中,我想要他们看到地平线的角度..
例如,如果他们正在看地平线我想要90度退回,如果他们在天空中直视我应该得到180,直接向下-180 ..然后我也会想要磁北的度数他们是使用磁力计寻找..答案 0 :(得分:1)
values[2]
应该已经包含了reference中提到的度数值:
值[2]:滚动,绕Y轴旋转(-90 <=滚动<= 90),带正值 z轴向x轴移动时的值。
<强>更新强>
看看这张图片:http://developer.android.com/images/axis_device.png
在这里您可以看到蓝轴 - Y轴。当你的手机转过来时,它被称为“滚动”。旋转角度将包含在values[2]
。