Fotoğraf makinesindeki nesnelerden nesneler göstermeye yönelik program yapıyorum ve bu, dikey yönde (80-110 ve 260-280 derecelerde olduğu gibi) birkaç derece sola ve sağa doğru hemen hemen iyi çalışıyor. Diğer + -320 derecelerde iyi çalışır. TYPE_ROTATION_VECTOR ve ivme ölçer manyetometre ile kullanmayı denedim ve aynı sonuca sahipler. Herhangi bir çözüm bilen var mı? TYPE_ROTATION_VECTOR ileAndroid AR yönlendirme
:
if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)
{
float[] roationV = new float[16];
SensorManager.getRotationMatrixFromVector(roationV, event.values);
float[] orientationValuesV = new float[3];
SensorManager.getOrientation(roationV, orientationValuesV);
tvHeading.setText(String.format(
"Coordinates: lat = %1$.2f, lon = %2$.2f, time = %3$.2f",
orientationValuesV[0], orientationValuesV[1], orientationValuesV[2]));
float[] rotationMatrix=new float[16];
mSensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
float[] orientationValues = new float[3];
SensorManager.getOrientation(rotationMatrix, orientationValues);
double azimuth = Math.toDegrees(orientationValues[0]);
double pitch = Math.toDegrees(orientationValues[1]);
double roll = Math.toDegrees(orientationValues[2]);
tvOrientation.setText(String.format(
"Coordinates: lat = %1$.2f, lon = %2$.2f, time = %3$.2f",
azimuth,pitch,roll));
}
ivmeölçer + manyetometrelerle
if (event.sensor == mAccelerometer) {
System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);
mLastAccelerometer = meanFilterAccelSmoothing
.addSamples(mLastAccelerometer);
mLastAccelerometer = medianFilterAccelSmoothing
.addSamples(mLastAccelerometer);
for (int i = 0; i < mLastAccelerometer.length; i++) {
mLastAccelerometer[i] = (float) Math.floor(mLastAccelerometer[i] * 1000)/1000;
}
mLastAccelerometerSet = true;
}
if (event.sensor == mMagnetometer) {
System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);
mLastMagnetometer = meanFilterMagneticSmoothing.addSamples(mLastMagnetometer);
mLastMagnetometer = medianFilterMagneticSmoothing.addSamples(mLastMagnetometer);
for (int i = 0; i < mLastMagnetometer.length; i++) {
mLastMagnetometer[i] = (float) Math.floor(mLastMagnetometer[i] * 1000)/1000;
}
mLastMagnetometerSet = true;
}
if (mLastAccelerometerSet && mLastMagnetometerSet) {
SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);
SensorManager.getOrientation(mR, mOrientation);
if (angeles.size() > 0) {
for (int i = 0; i < mapObjects.size(); i++) {
compassFunc(i, mOrientation[0], mOrientation[1], mOrientation[2]);
}
}
private void compassFunc(int number, float... values) {
double angularXSpeed = Math.floor(values[0] * 180/Math.PI * 100)/100;
double angularYSpeed = Math.floor(values[1] * 180/Math.PI * 100)/100;
double angularZSpeed = Math.floor(values[2] * 180/Math.PI * 100)/100;
tvOrientation.setText(String.format(
"Screen: lt= %1$.2f : %2$.2f,rt= %3$.2f : %4$.2f,lb= %5$.2f : %6$.2f,rb= %7$.2f : %8$.2f",
xLeftTop, yLeftTop, xRightTop,yRightTop,xLeftBottom,yLeftBottom,xRightBottom,yRightBottom));
}
Sorunun ne olduğunu bize göstermediniz. Bu çıktı nedir ve beklediğinizden nasıl farklıdır? Çoğunlukla belirli yönelimlerdeki konular [gimbal lock] (http://en.wikipedia.org/wiki/Gimbal_lock) kaynaklıdır, böylece daha fazla ayrıntı verene kadar bu benim kör tahminim olur. – rhashimoto
Sorun şu ki, x ekseninde y-eksenim bu -3-20 derece olduğunda ve iyi çalışıyor ve doğru değişiyor, fakat telefonumu dikey konuma çevirdiğimde, örneğin x -axys 120 ve y-axys yaklaşık 30 derece ang yani y-axys telefonum açmak için 90 x-axys yakın 180 + değişebilir. – tarasmorskyi