2014-04-21 2 views
0

Unity 프로그램에서 사용자 지정 위치를 가리키는 나침반을 만들려고합니다. 그러나 그것은 완전히 벗어 났고, 일반적으로 잘못된 방향을 지적하고, 내 논리에 무엇이 잘못되었는지를 파악할 수없는 것 같습니다.Unity에서 특정 위치로 나침반 만들기

여기에서 곡선 형상 베어링 방정식을 사용하고 있습니다 : http://www.yourhomenow.com/house/haversine.html

  1. 가 현재 위치를 가져옵니다.
  2. 현재 위치에서 목표 위치로 베어링을 계산하십시오.
  3. 진정한 북쪽을 기준으로 화면 나침반을 회전합니다. 내가 그 코드 오프셋 (offset) 베어링을 제거하면

    // Calculate bearing between current location and target location 
    // Get current GPS location 
    float lat1 = Input.location.lastData.latitude; 
    float lon1 = Input.location.lastData.longitude; 
    float lat2 = TargetLatitude; 
    float dLon = TargetLongitude - lon1; 
    
    // Calculate bearing 
    var y = Mathf.Sin(dLon) * Mathf.Cos(lat2); 
    var x = Mathf.Cos(lat1) * Mathf.Sin(lat2) - 
         Mathf.Sin(lat1) * Mathf.Cos(lat2) * Mathf.Cos(dLon); 
    var brng = ((Mathf.Atan2(y, x)*(180.0f/Mathf.PI)) + 360.0f) % 360.0f; 
    
    Dump.text = brng.ToString(); 
    
    // Rotate the to target location relative to north. Z axis pointing out of screen. 
    transform.eulerAngles = new Vector3(0, 0, Mathf.MoveTowardsAngle(transform.localEulerAngles.z, Input.compass.trueHeading + brng, COMPASS_MAXDELTA)); 
    

, 그것은 디지털 나침반만큼 북쪽으로 지적한다.

답변

1

모든 각도가 각도가 아닌 라디안인지 확인하십시오.

Mathf.Sin(dLon * Mathf.Deg2Rad)과 같은 경우에 Mathf.Deg2Rad을 사용하면 올바른 결과를 얻을 수 있습니다. Haversine 공식은 라디안 단위의 각도에서만 작동합니다.

+0

실제로 문제가되었습니다. 그리고 지금은 기분이 나쁩니다. 커피 한 잔 할 시간이야. – BlamKiwi

관련 문제