Tôi bị hỏng CMRotationMatrix * và tôi muốn nhận được độ cao, vâng, cuộn từ ma trận. Bất kỳ ý tưởng nào tôi có thể làm điều đó?lấy quảng cáo chiêu hàng, ngáp, cuộn từ CMRotationMatrix
Cảm ơn
Tôi bị hỏng CMRotationMatrix * và tôi muốn nhận được độ cao, vâng, cuộn từ ma trận. Bất kỳ ý tưởng nào tôi có thể làm điều đó?lấy quảng cáo chiêu hàng, ngáp, cuộn từ CMRotationMatrix
Cảm ơn
của nó tốt hơn để sử dụng tec non hơn Góc Euler .... Các roll, pitch và yaw giá trị có thể được bắt nguồn từ quaternion sử dụng các công thức:
roll = atan2(2*y*w - 2*x*z, 1 - 2*y*y - 2*z*z)
pitch = atan2(2*x*w - 2*y*z, 1 - 2*x*x - 2*z*z)
yaw = asin(2*x*y + 2*z*w)
Nó có thể được thực hiện như:
CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion;
myRoll = radiansToDegrees(atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z)) ;
myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z));
myYaw = radiansToDegrees(asin(2*quat.x*quat.y + 2*quat.w*quat.z));
nơi radianstoDegrees là một chỉ thị tiền xử lý thực hiện ed as:
#define radiansToDegrees(x) (180/M_PI)*x
Điều này được thực hiện để chuyển đổi giá trị radian do công thức đưa ra thành độ.
Bạn có thể tìm thêm thông tin về chuyển đổi tại đây: tinkerforge và tại đây: Conversion between Quaternions and Euler angles.
sân, yaw, cuộn từ ma trận. Bất kỳ ý tưởng làm thế nào tôi có thể làm điều đó?
Thứ tự nào? Pitch, yaw và roll, thường được gọi là góc Euler, không đại diện cho phép quay một cách rõ ràng. Tùy thuộc vào thứ tự bạn thực hiện các phép quay phụ riêng lẻ mà bạn kết thúc với các ma trận xoay hoàn toàn khác nhau.
Đề xuất cá nhân của tôi: Không sử dụng góc Euler, họ chỉ cần gọi (số) rắc rối. Sử dụng ma trận (bạn đã làm) hoặc quaternion.
Tìm thấy nó ra bản thân mình:
CMAttitude *currentAttitude = motionManager.deviceMotion.attitude;
if (currentAttitude == nil)
{
NSLog(@"Could not get device orientation.");
return;
}
else {
float PI = 3.14159265;
float yaw = currentAttitude.yaw * 180/PI;
float pitch = currentAttitude.pitch * 180/PI;
float roll = currentAttitude.roll * 180/PI;
}
'M_PI' sẽ là đại diện chính xác hơn của pi, và giúp bạn tiết kiệm biến;) –
Tôi tò mò, lý do đằng sau" tốt hơn nên sử dụng Quaternion hơn Euler Angles "là gì? – Jacksonkr
Cảm ơn. Nó hoạt động tốt. motionManager.deviceMotion.attitude.pitch/roll/yaw thực sự không ổn định.Tôi tự hỏi tại sao Apple không sửa chúng. –