首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从俯仰、侧滚和偏航中找出角度?

如何从俯仰、侧滚和偏航中找出角度?
EN

Stack Overflow用户
提问于 2012-03-27 19:08:06
回答 2查看 2.3K关注 0票数 1

我有一个加速计和陀螺仪嵌入芯片,我从它得到x,y,z轴(从加速计),俯仰,滚动和偏航(从陀螺仪)。使用这些值,我必须旋转3D图像。glRotatef(Angle,Xvector,Yvector,Zvector)如何从俯仰、侧滚和偏航中找出角度?对此有什么方程式吗?

EN

回答 2

Stack Overflow用户

发布于 2012-03-27 19:46:48

从陀螺仪接收到的那些旋转值不应该被视为围绕不同轴的单独旋转,而是时间差分复合旋转。你的问题是,你想要找到微分旋转矩阵dR,对于该矩阵,微分分量可以按任意顺序相乘,从而得到该矩阵

代码语言:javascript
复制
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版本中删除了。

票数 2
EN

Stack Overflow用户

发布于 2018-07-11 04:00:29

你对安卓acceleration_sensor的俯仰和偏航角度的回答是:

双角度= Math.atan2(zVal,yVal)/(Math.PI/180) //用于间距

双角度= Math.atan2(xVal,yVal)/(Math.PI/180) //用于偏航

它们是经过测试的。

代码语言:javascript
复制
    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));


    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9888413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档