float rotate[] = new float[9];
float acc[] = new float[3];

SensorEventListener rotateVectorEventListener = new SensorEventListener() {

		@Override
		public void onSensorChanged(SensorEvent event) {
			// TODO Auto-generated method stub
			switch (event.sensor.getType()) {
			case Sensor.TYPE_ACCELEROMETER: {
				SensorManager.getRotationMatrixFromVector(rotate, event.values);
			}
				break;
			case Sensor.TYPE_ROTATION_VECTOR: {
				for (int i = 0; i < 3; i++) {
					acc[i] = event.values[0] * rotate[i * 3] + event.values[1] * rotate[i * 3 + 1]
					        + event.values[2] * rotate[i * 3 + 2];
				}
			}
				break;
			}

		}

		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			// TODO Auto-generated method stub

		}
	};

이런식으로 사용하게 되면 항상 장치의 방향에 관계없이 실제의 x y z 축의 가속도를 나타내 준다.
하지만 자이로 센서가 없는 장치, 혹은 센서의 감도가 좋지 않다면  가만히 놔둬도 측정값이 발광을 하는데다
적분을 하면 말도 안되는 값으로 폭주..
갤럭시S2 는 자이로 센서가 있어서 시도해볼만 할것 같다.
하지만 난 없잔아?
안될거야.. 

'Programming > Android' 카테고리의 다른 글

Cocos2D Android 줄바꾸기  (4) 2012.02.04
INS 연구용 코드  (0) 2011.11.06
Posted by 동적할당
: