0

Обратитесь к приведенному ниже коду, я получил 4 номера из события датчика Game_Rotation_Vector, и я хочу, чтобы получить угол поворота оси моего телефона.Как преобразовать поворот изображения векторного датчика в углы оси

например. Если я поворачиваю счетчик часов экрана телефона на 90 градусов, я хочу получить фактическое значение 90deg от данных датчика.

Может ли кто-нибудь предоставить код для преобразования четырех векторных значений поворота игры в 3 значения угла оси?

+0

Это выглядит нормально кроме к.т. вещей, что это? – weston

+0

То есть для преобразования радиуса в углы. Если я поверну свой телефон на 180 градусов, я изменил только с -40 до 40. Это должно быть от -90 до 90. Не уверен, что что-то не так с моим кодом. – mind1n

+0

xa, xy и xz не являются углами, они являются координатами оси, читайте ссылку в моем ответе. – weston

ответ

0

значения помещаются в блок кватернион like so:

sensors_event_t.data[0] = rot_axis.x*sin(theta/2); 
sensors_event_t.data[1] = rot_axis.y*sin(theta/2); 
sensors_event_t.data[2] = rot_axis.z*sin(theta/2); 
sensors_event_t.data[3] = cos(theta/2) 

Так обратна просто:

double theta = Math.acos(vals[3])*2; 
double sinv = Math.sin(theta/2); 

double xa = vals[0]/sinv; 
double ya = vals[1]/sinv; 
double za = vals[2]/sinv; 

Но ха, ху, и XZ не являются углы, они являются координатами оси, как описано в документации. Я не уверен, что вы хотите с этим, вам, скорее всего, будет лучше пытаться достичь своей неустановленной цели с помощью элемента quaternion напрямую.

Причина использования unit quaternion заключается в том, чтобы избежать gimble lock, в основном вы не можете описать каждое возможное вращение в терминах трех углов, рулона/высоты/рыскания, например, при определенном шаге и углу рыскания вы можете потерять способность к рулону ,

Так один способ использовать это, чтобы преобразовать в матрицу вращения:

Source

if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) { 
    // convert the rotation-vector to a 4x4 matrix. the matrix 
    // is interpreted by Open GL as the inverse of the 
    // rotation-vector, which is what we want. 
    SensorManager.getRotationMatrixFromVector(
      mRotationMatrix , event.values); 
} 
+0

Спасибо за объяснение, я неправильно понял rot_axis для осевых углов. Итак, как получить угол оси от значений кватернионов? Я проиграл в математике и нуждаюсь в некотором примере кода. – mind1n

+0

Как я уже сказал, я думаю, что вам лучше не делать этого, но я не знаю, что такое большая картина, то есть что вы собираетесь делать с углами? – weston

+0

Углы будут использоваться для управления позицией курсора мыши моего ноутбука. Например, если я поворачиваю голову слева направо, курсор мыши будет следовать, потому что расстояние между моим телефоном и экраном ноутбука можно измерить и настроить. Так что мне действительно нужно знать, как изменился мой телефон. Благодарю. – mind1n

 Смежные вопросы

  • Нет связанных вопросов^_^