2017-04-15 2 views
0

챠오 ... 나는 분명 내 문제vector3하는 진법과 viceversa에

langague는 unity3d에 C#을 명시하려고하고 난 장면 여기

에에게 빌드 적경, 적위와 거리를 사용하려고 (의 아르> H, M, S DEC-> DEG, M, S)를 float에

---> 60 진수 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 때 라이다 및 dec vector3.zero와 다른 점에서 계산됩니다.

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

지금 난 내가 생각

를 진법을 다시 Vector3에서 원하는 : anni_luce -> Vector3.Distance (punto_osservazione, 포인트);

하지만 ar과 dec은 어떻게 그 부분을 뒤집을 수 있습니까? 아이디어가 있으십니까?

답변

0

나는 이것을 시도하지만 AR 잘못 가지고 : 나는 Math.Abs가 completly 잘못 나올 whitout 180 개도를 넘어 가지 않습니다 이해한다면

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; 
} 

는하지만, 오른쪽 (AR) 없습니다.

AngleVectorPlane 여기에서 찾으십시오 ... http://wiki.unity3d.com/index.php/3d_Math_functions

관련 문제