0

Unity プログラムでカスタムの場所を指すコンパスを作成しようとしています。しかし、それは完全にずれており、一般的に間違った方向を指しており、自分のロジックの何が問題なのかを理解できないようです。

私はここから湾曲したジオメトリベアリング方程式を使用しています: http://www.yourhomenow.com/house/haversine.html

  1. 現在地を取得します。
  2. 現在地から目的地までの方位を計算します。
  3. 画面コンパスを真北に対して回転させます。

    // 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));
    

そのコードの方位オフセットを削除すると、デジタル コンパスが十分に北を指します。

4

1 に答える 1