我正在開發一個增強現實應用程序(目前)想要在表面上顯示簡單的立方體,並且能夠在空間(旋轉和位移)中移動到在所有不同的角度看立方體。校準相機的問題在這裏不適用,因爲我要求用戶將iPhone放在他想要放置立方體的表面上,然後按下按鈕重置姿態。 陀螺儀和核心運動爲了找出相機的旋轉非常簡單。我這樣做:使用Core Motion獲取加速度計數據的位移
if (referenceAttitude != nil) {
[attitude multiplyByInverseOfAttitude:referenceAttitude];
}
CMRotationMatrix mat = attitude.rotationMatrix;
GLfloat rotMat[] = {
mat.m11, mat.m21, mat.m31, 0,
mat.m12, mat.m22, mat.m32, 0,
mat.m13, mat.m23, mat.m33, 0,
0, 0, 0, 1
};
glMultMatrixf(rotMat);
這工作真的很好。 無論如何,當我嘗試在加速期間發現空間位移時會出現更多問題。 Core Motion的Apple Teapot示例只是將加速度矢量的x,y和z值添加到位置矢量。這(除了沒有多少意義)在加速之後具有將對象返回到原始位置的結果。 (由於加速度從正向負向反向)。 他們這樣做,是這樣的:
translation.x += userAcceleration.x;
translation.y += userAcceleration.y;
translation.z += userAcceleration.z;
我應該怎麼做,找出在一些istant加速位移? (有已知的時間差)。尋找其他答案,似乎我必須整合兩次才能從加速度獲得速度,然後從速度獲取位置。但是無論如何,代碼中都沒有例子,我認爲這不是必須的。此外,還有一個問題,即當iPhone仍在飛機上時,加速度計值不爲空(我認爲有一些噪音)。我應該過濾這些值多少?我應該過濾它們嗎?
與d的問題= 0.5 *在一般A * T^2是,它需要一個恆定的加速度等在http://en.wikipedia.org/wiki/描述加速。 – Kay 2011-01-16 12:34:44
那麼,假設v(0)== 0是至關重要的,但我們需要一個點開始,並應該忍受。海事組織更關鍵的部分出現幾秒後,當你有一個== 0和v!= 0(如我的答案中所解釋的)。 – Kay 2011-01-16 12:42:34