I'm trying to translate the accelerometer values from the device
coordinates to the world coordinates.
It's not clear how to do this.
I guess getRotationMatrix method can do sth about this,and I use the
matrix R the method generated multiply accelerometer values but I did
not get what I expected.

Here is my code:
====================================================
public void onSensorChanged(SensorEvent event) {

                if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
                        t1.setText("X:"+event.values[0]);
                        t2.setText("Y:"+event.values[1]);
                        t3.setText("Z:"+event.values[2]);
                        e1=event.values.clone();
                        b=true;

                }
                if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD)
{
                        t8.setText("X:"+event.values[0]);
                        t9.setText("Y:"+event.values[1]);
                        t10.setText("Z:"+event.values[2]);
                        e2=event.values.clone();
                        b=true;
                }
                if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){
                        t11.setText("X:"+event.values[0]);
                        t12.setText("Y:"+event.values[1]);
                        t13.setText("Z:"+event.values[2]);

                }
                if(e1!=null&e2!=null&b==true){
                        float[] R=new float[9];
                        float[] I=new float[9];
                        float[] outR=new float[9];
                        float[] e3=new float[3];
                        boolean b=SensorManager.getRotationMatrix(R,I,
e1, e2);
                        float[] result=new float[3];
                        result[0]=R[0]*e1[0]+R[1]*e1[1]+R[2]*e1[2];
                        result[1]=R[3]*e1[0]+R[4]*e1[1]+R[5]*e1[2];
                        result[2]=R[6]*e1[0]+R[7]*e1[1]+R[8]*e1[2];

                        t19.setText("X:"+e3[0]);
                        t20.setText("Y:"+e3[1]);
                        t21.setText("Z:"+e3[2]);

                        if(result[0]>10.0f|result[1]>10.0f){
                                Log.i("aaa", "X:"+result[0]+"
Y:"+result[1]+" Z:"+result[2]);
                        }
                        b=false;
                }
        }

The above code seems can do sth expected.When the device stays
statically,result[0] and result[1] approach 0 and result[2] approaches
standard gravity.But when you give the device a acceleration in any
direction,result[0] and result[1] are still 0 while result[2] varies a
lot.
Any help would be appreciated.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to