如果我理解你的问题,我认为你有兴趣获得 态度 你的设备。你可以使用 attitude 的财产 CMDeviceMotion 你得到的对象 deviceMotion 的财产 CMMotionManager 宾语。
attitude
CMDeviceMotion
deviceMotion
CMMotionManager
您可能会对两个不同的角度感兴趣 CMAttitude 类: 滚 和 沥青 。如果您将设备想象为顶部有螺旋桨的飞机(耳机插孔所在的位置),则俯仰是指飞机在爬升或俯冲时平面/设备与地面形成的角度。与此同时,滚动是“机翼”与地面形成的角度,如果飞机正在倾斜或中间滚动。
CMAttitude
(顺便说一句,还有第三个角度叫做 偏航 我认为与你的问题无关。)
角度将以弧度给出,但如果你想要的话,它很容易将它们转换为度数(乘以180然后除以 pi )。
pi
假设我理解你想要什么,好消息是你可能不需要理解任何线性代数来捕获和使用这些角度。 (如果我遗漏了什么,请澄清,我很乐意进一步帮助。)
的 UPDATE 强> (根据评论):
态度价值观 CMAttitude 物体相对于地面(即,默认参考框架的Z轴为垂直,指向与重力相反的方向),因此您不必担心抵消重力。因此,例如,如果您将设备放在平坦的桌面上,然后将其卷到它的侧面,那么 roll CMAttitude对象的属性将从0变为正或负90度(+ - .5pi弧度),具体取决于您将其滚动到哪一侧。与此同时,如果你开始平躺,然后逐渐站起来,同样会发生 pitch 属性。
roll
pitch
虽然您可以根据需要直接使用俯仰角,横向角和偏航角,但您也可以设置不同的参考系(例如,“向上”的不同方向)。要做到这一点,只需在“校准”步骤中捕获该方向的姿态,然后使用CMAttitude multiplyByInverseOfAttitude: 将姿态数据转换为新参考系的方法。
multiplyByInverseOfAttitude:
即使你的问题只提到捕获“精益 角度 “(在地面上),你可能想要捕获3个姿态角中的至少2个(例如,俯仰和滚动或偏航,取决于他们正在做什么),可能全部三个,如果设备将是在一个人的口袋里。(例如,如果口袋宽松,设备可以以各种方式在口袋中旋转。)但是,在大多数情况下,我认为你可能只能依靠三个中的两个(除非你会看到整个录音过程中偏航发生剧烈变化。例如,在我的牛仔裤口袋里,手机通常几乎是垂直的。因此,对我来说,音调会因为我走路,坐着而变化很多。每当我改变我所面对的方向时,滚动会发生变化。同时,偏航根本不会有太大的变化(除非我做卡丁车轮,我不能!)。因此我可能会忽略偏航。
总结一下要点:使用这些姿态角度,你不需要做任何线性代数,也不需要担心引力(当然,你可能想把它用于其他目的)。
的 更新2 强> (基于Kay的新帖子):
凯回答并展示了如何使用重力和线性代数来确保你的角度 独特 。 (顺便说一句,顺便说一下,我认为你应该把这个帖子给予奖励,fwiw。)
根据您的想法,您可能希望使用此数学运算。你会想要使用线性代数和引力 如果 你需要一种标准化的“谈论”和/或方式 比较 在录音过程中的态度。如果你只想想象它们,你可能仍然可以逃避不使用增加的复杂性。 (例如,可视化(pitch = 90,roll = 0,yaw = 0)应该与可视化相同(pitch = 0,roll = 90,yaw = 90)。)在我上面的方法中,你可以有多种方式提到“相同”的态度,实际上都不是 错误 ,本身。他们仍然会给你相对于地面的角度。
但陀螺仪可以从一种有效的态度描述切换到另一种态度这一事实意味着我上面所写的关于只能解决3个组件中的2个的问题需要纠正:因此,你需要捕获所有三个组件,无论如何。抱歉。