( knzoltan | 2021. 06. 24., cs – 09:24 )

Köszi! Átültetem c sharp osztályba, igazabol majdnem keszen vagyok, csak nem talalom a Csharp statikus Math osztályában a sinl meg cosl függvényeket. Ezek kihelyettesíthetőek?

 

using System;

namespace GPS_transformer
{
    struct _WGS84
    {
        double fi, la;
    };
    class WGS84
    {
        static double rad(double x)
        {
            return (x / 180.0 * Math.PI);
        }

        static double deg(double x)
        {
            return (x / Math.PI * 180.0);
        }



        public _WGS84 eov2wgs(double EOVY, double EOVX)
        {
            _WGS84 ret;
            double a1 = 6378160, b1 = 6356774.52, a2 = 6378137, b2 = 6356752.31;
            double dX = 52.684, dY = -71.194, dZ = -13.975, eX = 0.312, eY = 0.1063, eZ = 0.3729, k = 1.0191e-6;
            double FI2, LA2, st, ct, teta, P, ev2, e22, f2, Zv, Yv, Xv;
            double h = 0; // magassag
            double Z, Y, X, N, e2, f, fi, la;

            double C1 = 1.0007197049;
            double E1 = rad(19.048571778);

            double G1 = rad(47.1);

            double H1 = 6379296.419;

            double I1 = 47.0 + 7.0 / 60.0 + 20.0578 / 3600.0;
            double J1 = rad(I1);

            double K1 = EOVX - 200000;
            double L1 = EOVY - 650000;

            double M1 = 2.0 * (Math.Atan(Math.Exp(K1 / H1)) - Math.PI / 4.0);
            double N1 = L1 / H1;

            double O1 = 47 + 1.0 / 6.0;
            double P1 = Math.Asin(Math.Cos(G1) * Math.Sin(M1) + Math.Sin(G1) * Math.Cos(M1) * Math.Cos(N1));

            double Q1 = Math.Asin(Math.Sin(N1) * Math.Cos(M1) / Math.Cos(P1));

            //R1
            double T1 = rad(O1);

            double U1 = 6378160;
            double V1 = 6356774.516;

            double W1 = (U1 * U1 - V1 * V1) * Math.Cos(T1) * Math.Cos(T1) / V1 / V1;
            double X1 = 180 * 3600 / Math.PI;

            double Y1 = Math.Sqrt(1.0 + W1);
            double Z1 = 1.5 * W1 * Math.Tan(T1) / X1;

            double AA1 = 0.5 * W1 * (-1.0 + Math.Tan(T1) * Math.Tan(T1) - W1 + 5 * W1 * Math.Tan(T1)) / Y1 / X1 / X1;
            double S1 = (P1 - J1) * X1;

            fi = (T1 + S1 * Y1 / X1 - S1 * S1 * Z1 / X1 + S1 * S1 * S1 * AA1 / X1);
            la = (E1 + Q1 / C1);

            f = (a1 - b1) / a1;
            e2 = 2 * f - f * f;

            N = a1 / (Math.Sqrt(1 - e2 * sinl(fi) * sinl(fi)));
            X = (N + h) * Math.Cos(fi) * cosl(la);

            Y = (N + h) * Math.Cos(fi) * sinl(la);
            Z = (N * (1 - e2) + h) * sinl(fi);

            Xv = dX + (1 + k) * (X + rad(eZ / 3600) * Y - rad(eY / 3600) * Z);
            Yv = dY + (1 + k) * (-X * rad(eZ / 3600) + Y + Z * rad(eX / 3600));
            Zv = dZ + (1 + k) * (X * rad(eY / 3600) - Y * rad(eX / 3600) + Z);

            f2 = (a2 - b2) / a2;
            e22 = 2 * f2 - f2 * f2;
            ev2 = (a2 * a2 - b2 * b2) / b2 / b2;

            P = sqrt(Xv * Xv + Yv * Yv);
            teta = atan2l(Zv * a2, P * b2);

            ct = cosl(teta);
            st = sinl(teta);
            FI2 = atan2l(Zv + ev2 * b2 * st * st * st, P - e22 * a2 * ct * ct * ct);
            LA2 = atan2l(Yv, Xv);

            ret.fi = deg(FI2);
            ret.la = deg(LA2);

            return ret;
        }
    }
}