我有一个加速计和陀螺仪嵌入芯片,我从它得到x,y,z轴(从加速计),俯仰,滚动和偏航(从陀螺仪)。使用这些值,我必须旋转3D图像。glRotatef(Angle,Xvector,Yvector,Zvector)如何从俯仰、侧滚和偏航中找出角度?对此有什么方程式吗?
发布于 2012-03-27 19:46:48
从陀螺仪接收到的那些旋转值不应该被视为围绕不同轴的单独旋转,而是时间差分复合旋转。你的问题是,你想要找到微分旋转矩阵dR,对于该矩阵,微分分量可以按任意顺序相乘,从而得到该矩阵
dR = dR_x * dR_y * dR_z
= dR_y * dR_x * dR_z
= dR_y * dR_z * dR_x
= dR_z * dR_x * dR_y
= dR_z * dR_y * dR_x要做到这一点,最简单的方法是计算每个排列,并取它们的平均矩阵为dR‘,然后应用正交化。
然后使用这个矩阵。忘了glRotate吧,你不需要它了,不管怎样,它已经从后来的OpenGL版本中删除了。
发布于 2018-07-11 04:00:29
你对安卓acceleration_sensor的俯仰和偏航角度的回答是:
双角度= Math.atan2(zVal,yVal)/(Math.PI/180) //用于间距
双角度= Math.atan2(xVal,yVal)/(Math.PI/180) //用于偏航
它们是经过测试的。
private SensorManager sensorManager;
TextView x;
TextView y;
TextView z;
TextView ang;
String sx, sy, sz;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.l1);
x = (TextView) findViewById (R.id.textView2);
y = (TextView) findViewById (R.id.textView3);
z = (TextView) findViewById (R.id.textView4);
ang = (TextView) findViewById(R.id.textView5);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor
(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
float xVal = event.values[0];
float yVal = event.values[1];
float zVal = event.values[2];
sx = "X Value : <font color = '#800080'> " + xVal + "</font>";
sy = "Y Value : <font color = '#800080'> " + yVal + "</font>";
sz = "Z Value : <font color = '#800080'> " + zVal + "</font>";
x.setText(Html.fromHtml(sx));
y.setText(Html.fromHtml(sy));
z.setText(Html.fromHtml(sz));
double angle = Math.atan2(zVal, xVal)/(Math.PI/180);
ang.setText(String.valueOf(angle));
}
}https://stackoverflow.com/questions/9888413
复制相似问题