Звучит так, будто вы пытаетесь получить углы Эйлера от кватерниона, поэтому эта ссылка может быть лучшей отправной точкой.Пример hello-myo из документации Myo SDK (часть загрузки SDK здесь ) использует следующий код:
// Calculate Euler angles (roll, pitch, and yaw) from the unit quaternion.
float roll = atan2(2.0f * (quat.w() * quat.x() + quat.y() * quat.z()), 1.0f - 2.0f * (quat.x() * quat.x() + quat.y() * quat.y()));
float pitch = asin(max(-1.0f, min(1.0f, 2.0f * (quat.w() * quat.y() - quat.z() * quat.x()))));
float yaw = atan2(2.0f * (quat.w() * quat.z() + quat.x() * quat.y()), 1.0f - 2.0f * (quat.y() * quat.y() + quat.z() * quat.z()));
Не относится к вышеприведенному и не уверен, будет ли этополезно, но если вы пытаетесь найти руку в реальном мире, вам всегда понадобится известная справочная или начальная ориентация, а затем сравните все следующие измерения с этим.С Myo это обычно делается, когда пользователь кладет руку в известное положение и нажимает кнопку калибровки.Иногда есть более умные способы сделать это, но это зависит от приложения.Получив эталон, вы вычтете его из будущего измерения, чтобы получить реальную ориентацию, по существу: orientationReal = orientationMeasured - orientationReference
Обычно вы сначала захотите выполнить этот расчет в формате кватерниона (см. Блокировка карданного подвеса ), но в зависимости отв вашем приложении, может быть, углы Эйлера будут в порядке.