2017-10-04 1 views
0

목표는 사용자가 휴대 전화를 어느 정도 옆으로 옮기는 지 감지하는 것입니다. 가장 단순한 시나리오를 가정 해 보겠습니다. 전화기는 홈 버튼이 천장을 향하게 한 탁자 위에 놓습니다.iOS : 사용자 이동 전화를 왼쪽/오른쪽으로 감지합니다. (회전은 아니지만 움직입니다)

사용자가 테이블을 따라 전화를 왼쪽/오른쪽으로 밀면 이동 한 양을 어떻게 감지 할 수 있습니까?

아래 코드는 올바른 값을 등록하지 않는 것 :

let motionManager = CMMotionManager() 

override func update(_ currentTime: TimeInterval) { 
    processUserMotion(forUpdate: currentTime) 
}  

func processUserMotion(forUpdate currentTime: CFTimeInterval) { 
     // 2 
    if let data = motionManager.accelerometerData { 
     // 3 
     if fabs(data.acceleration.x) > 0.2 { 
      // 4 How do you move the ship? 
      print("X Acceleration: \(data.acceleration.x)") 
     } 

     if fabs(data.acceleration.y) > 0.2 { 
      // 4 How do you move the ship? 
      print("Y Acceleration: \(data.acceleration.y)") 
     } 

     if fabs(data.acceleration.z) > 0.2 { 
      // 4 How do you move the ship? 
      print("Z Acceleration: \(data.acceleration.y)") 
     } 
    } 
} 

답변

2

가속도계 만 측정 가속도를. 기껏해야 휴대 전화가 왼쪽/오른쪽으로 움직이기 시작할 때 약간의 가속도를 볼 수 있으며 좌/우 이동을 멈 추면 감속을 볼 수 있습니다.

이론 상으로는 위치 계산을 시도하기 위해 가속도를 두 번 통합 할 수 있습니다 (기본 물리학/미적분학에서는 가속도를 통합하여 속도를 얻고 속도를 통합하여 위치를 얻을 수 있음).

실제적으로 가속도계 데이터는 정확하지 않은 정확도로 작동하기에는 너무 정확하지 않고 시끄 럽습니다. 각 통합 단계마다 오류가 확대되기 때문입니다.

절대 위치에 의존하지 않도록 디자인을 변경하는 것이 좋습니다. 또는 카메라와 이미지 프로세싱을 사용하여 세계 공간에서 전화 위치를 설정하는 ARKit을 조사 할 수 있습니다 (카메라가 아무 것도 볼 수 없기 때문에 테이블에 누워있는 휴대폰의 예에서는 작동하지 않지만).

로테이션이 훨씬 간단하게 작동하는 이유는 가속도계가 중력을 가속도로 측정한다는 것입니다. 따라서 어느 방법이든 작동하기가 쉽습니다. 그런 다음 회전을 측정하는 자이로 (gyros)는 표제/방위각을 매우 정확하게 만들 정도로 정확하며 누적 된 오류로 인한 드리프트를 수정하기 위해 자기 나침반과 결합 할 수 있습니다.

장치 회전을 제어 방법으로 바꾸는 것은 간단하게 들리지만 실제로는 어렵거나 비현실적인 것들 중 하나입니다.

+0

고마워요! 실제로 테이블 예제는 문제를 단순화하기 위해 고안된 것입니다. 실제 사용 사례는 한 손으로 게임을하기위한 표준 위치와 같이 화면의 엄지 손가락으로 휴대 전화를 한 손에 들고있을 것입니다. ARKit은 사용자가 장치를 왼쪽/오른쪽으로 얼마나 이동했는지 쉽게 측정 할 수있게 해주는 반면 ARKit은 실제로 실용적이지 않았습니다. – Crashalot

+0

예, 저는 ARKit이이 작업을 수행 할 수 있다는 것을 확신합니다. 실제로 사용하기 전에는 사용할 수있는 것이 없습니다. 나는 ARKit을 직접 사용하지 않았기 때문에 코드에 통합하는 것이 얼마나 쉬운 지 또는 다른 합병증이 있는지 (예를 들어 지연이 심하거나 좋은 조명 수준에서만 작동하는지 여부 등) 말할 수 없다. 바쁜 거리 장면 등에서 사용하면 혼란스러워집니다.) 모르겠다. – Columbo

+0

충분히 공정하게, ARKit이이 작업을 수행 할 수 있다는 사실을 알기 바란다. – Crashalot

관련 문제