2017-04-15 3 views
0

Ciao ... J'essaie d'énoncer clairement mon problèmesexagésimal à Vector3 et vice-versa

Le langague est C# sur Unity3D et j'essaie d'utiliser ascension droite, et la distance pour Déclinaison construire une scène

ici pour ne se charge pas trop je convertir sexagésimal (AR-> h, m, s DEC-> Deg, m, s) dans un flotteur

---> sexagésimal à Vector3

public static Vector3 SexPositionToVector3(float ascensione_retta, float declinazione, float anni_luce, Vector3 punto_osservazione=default(Vector3)) 
{ 
    Vector3 ret = Vector3.zero; 

    // DEC 
    float y = ((float)Mathf.Sin(Mathf.Deg2Rad * declinazione)) * anni_luce; 
    float x = ((float)Mathf.Cos(Mathf.Deg2Rad * declinazione)) * anni_luce;// Mathf.Abs 
    ret = (new Vector3(x, y, 0)) + punto_osservazione; 

    // AR 
    Vector3 angoli = new Vector3(0, ascensione_retta, 0); 
    ret = RotatePointAroundPivot(ret, punto_osservazione, angoli); 

    return ret; 
} 

punto_osservazione est quand ra et déc sont calculés à un point différent de vector3.zero;

et

public static Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles) 
{ 
    Vector3 dir = point - pivot; 
    dir = Quaternion.Euler(angles) * dir; 
    point = dir + pivot; 
    return point; 
} 

Maintenant, je veux revenir de Vector3 à sexagésimal

je pense: anni_luce -> Vector3.Distance (punto_osservazione, point);

mais ar et dec comment inverser cette partie? une idée?

Répondre

0

J'essaie cela, mais AR est trompé:

public static void Vector3ToSexPosition(Vector3 point, Vector3 punto_osservazione, out float _ar, out float _dec, out float _anni_luce) 
{ 
    // distanza 
    dista_real = Vector3.Distance(punto_osservazione, point); 
    // punto relativo al punto d'osservazione 
    Vector3 point_relativo = point - punto_osservazione; 
    // ascensione 
    float angolo_ar = Math.Abs(Mathf.Atan(point_relativo.z/point_relativo.x) * Mathf.Rad2Deg); 
    // declinazione 
    float angolo_dec = AngleVectorPlane(point_relativo.normalized, Vector3.up) * Mathf.Rad2Deg; 
} 

mais n'est pas droit (AR), si je comprends qu'il ne va pas au-delà de 180 degrés, whitout Math.abs sortent mal completly.

AngleVectorPlane trouver ici ... http://wiki.unity3d.com/index.php/3d_Math_functions