当前位置: 代码迷 >> J2SE >> 会C++和java的!啦
  详细解决方案

会C++和java的!啦

热度:8   发布时间:2016-04-24 01:05:53.0
会C++和java的!求助啦!
帮忙,把下面一段c++代码转为java代码,谢啦!
C/C++ code
//笛卡尔坐标系typedef struct tagCRDCARTESIAN{double x;double y;double z;}CRDCARTESIAN,*PCRDCARTESIAN;//typedef CRDCARTESIAN *PCRDCARTESIAN;//大地坐标系typedef struct tagCRDGEODETIC{double longitude; //经度double latitude;  //纬度 double height;    //大地高,可设为0}CRDGEODETIC;typedef CRDGEODETIC *PCRDGEODETIC;void CoordCovert::GeodeticToCartesian (PCRDCARTESIAN pcc, PCRDGEODETIC pcg,double dSemiMajorAxis, double dFlattening){     double B;    //纬度度数    double L;    //经度度数    double L0;    //中央经线度数    double l;    //L-L0    double t;    //tanB    double m;    //ltanB    double N;    //卯酉圈曲率半径     double q2;    double x;    //高斯平面纵坐标    double y;    //高斯平面横坐标    double s;    //赤道至纬度B的经线弧长    double f;    //参考椭球体扁率    double e2;    //椭球第一偏心率    double a;    //参考椭球体长半轴    //double b;    //参考椭球体短半轴    double a1;    double a2;    double a3;    double a4;    double b1;    double b2;    double b3;    double b4;    double c0;    double c1;    double c2;    double c3;        //投影带号    int zonewide=3;         int Datum=84;    //投影基准面类型:北京54基准面为54,西安80基准面为80,WGS84基准面为84    int prjno=0;    //    double IPI=0.0174532925199433333333;    //3.1415926535898/180.0    B=pcg->latitude ; //纬度    L=pcg->longitude ; //经度    if (zonewide==6)     {         prjno=(int)(L/zonewide)+1;         L0=prjno*zonewide-3;    }    else    {        prjno=(int)((L-1.5)/3)+1;        L0=prjno*3;    }        if(Datum==54)    {         a=6378245;         f=1/298.3;    }        else if(Datum==84)    {        a=6378137;        f=1/298.257223563;    }    L0=L0*IPI;    L=L*IPI;    B=B*IPI;    e2=2*f-f*f;//(a*a-b*b)/(a*a);    l=L-L0;    t=tan(B);    m=l * cos(B);    N=a/sqrt(1-e2* sin(B) * sin(B));    q2=e2/(1-e2)* cos(B)* cos(B);    a1=1+(double)3/4*e2+(double)45/64*e2*e2+(double)175/256*e2*e2*e2+(double)11025/16384*e2*e2*e2*e2+(double)43659/65536*e2*e2*e2*e2*e2;    a2=(double)3/4*e2+(double)15/16*e2*e2+(double)525/512*e2*e2*e2+(double)2205/2048*e2*e2*e2*e2+(double)72765/65536*e2*e2*e2*e2*e2;    a3=(double)15/64*e2*e2+(double)105/256*e2*e2*e2+(double)2205/4096*e2*e2*e2*e2+(double)10359/16384*e2*e2*e2*e2*e2;    a4=(double)35/512*e2*e2*e2+(double)315/2048*e2*e2*e2*e2+(double)31185/13072*e2*e2*e2*e2*e2;    b1=a1*a*(1-e2);    b2=(double)-1/2*a2*a*(1-e2);    b3=(double)1/4*a3*a*(1-e2);    b4=(double)-1/6*a4*a*(1-e2);    c0=b1;    c1=2*b2+4*b3+6*b4;    c2=-(8*b3+32*b4);    c3=32*b4;    s=c0*B+cos(B)*(c1*sin(B)+c2*sin(B)*sin(B)*sin(B)+c3*sin(B)*sin(B)*sin(B)*sin(B)*sin(B));    x=s+(double)1/2*N*t*m*m+(double)1/24*(5-t*t+9*q2+4*q2*q2)*N*t*m*m*m*m+(double)1/720*(61-58*t*t+t*t*t*t)*N*t*m*m*m*m*m*m;    y=N*m+(double)1/6*(1-t*t+q2)*N*m*m*m+(double)1/120*(5-18*t*t+t*t*t*t-14*q2-58*q2*t*t)*N*m*m*m*m*m;    y=y+1000000*prjno+500000;    pcc->x=x;    pcc->y=y-38000000;    ->z=0;}


------解决方案--------------------
不懂c++的路过,楼主我没学过c++,临时看了些语法。。。要不是你找我,真不想趟这趟浑水。看能用不。。。
Java code
public class CoordCovert {    // 笛卡尔坐标系    class CRDCARTESIAN {        double x;        double y;        double z;    };    // 大地坐标系    class CRDGEODETIC {        double longitude; // 经度        double latitude; // 纬度        double height; // 大地高,可设为0    }    CRDGEODETIC PCRDGEODETIC = new CRDGEODETIC();    CRDCARTESIAN PCRDCARTESIAN = new CRDCARTESIAN();    void GeodeticToCartesian(CRDCARTESIAN pcc, CRDGEODETIC pcg,            double dSemiMajorAxis, double dFlattening) {             double B;    //纬度度数            double L;    //经度度数            double L0;    //中央经线度数            double l;    //L-L0            double t;    //tanB            double m;    //ltanB            double N;    //卯酉圈曲率半径             double q2;            double x;    //高斯平面纵坐标            double y;    //高斯平面横坐标            double s;    //赤道至纬度B的经线弧长            double f = 0;    //参考椭球体扁率            double e2;    //椭球第一偏心率            double a = 0;    //参考椭球体长半轴            //double b;    //参考椭球体短半轴            double a1;            double a2;            double a3;            double a4;            double b1;            double b2;            double b3;            double b4;            double c0;            double c1;            double c2;            double c3;        //投影带号            int zonewide=3;                 int Datum=84;    //投影基准面类型:北京54基准面为54,西安80基准面为80,WGS84基准面为84            int prjno=0;    //            double IPI=0.0174532925199433333333;    //3.1415926535898/180.0            B = pcg.latitude ; //纬度            L = pcg.longitude ; //经度            if (zonewide==6)             {                 prjno=(int)(L/zonewide)+1;                 L0=prjno*zonewide-3;            }            else            {                prjno=(int)((L-1.5)/3)+1;                L0=prjno*3;            }                        if(Datum==54)            {                 a=6378245;                 f=1/298.3;            }                else if(Datum==84)            {                a=6378137;                f=1/298.257223563;            }            L0=L0*IPI;            L=L*IPI;            B=B*IPI;            e2=2*f-f*f;//(a*a-b*b)/(a*a);            l=L-L0;            t=tan(B);            m=l * cos(B);            N=a/sqrt(1-e2* sin(B) * sin(B));            q2=e2/(1-e2)* cos(B)* cos(B);            a1=1+(double)3/4*e2+(double)45/64*e2*e2+(double)175/256*e2*e2*e2+(double)11025/16384*e2*e2*e2*e2+(double)43659/65536*e2*e2*e2*e2*e2;            a2=(double)3/4*e2+(double)15/16*e2*e2+(double)525/512*e2*e2*e2+(double)2205/2048*e2*e2*e2*e2+(double)72765/65536*e2*e2*e2*e2*e2;            a3=(double)15/64*e2*e2+(double)105/256*e2*e2*e2+(double)2205/4096*e2*e2*e2*e2+(double)10359/16384*e2*e2*e2*e2*e2;            a4=(double)35/512*e2*e2*e2+(double)315/2048*e2*e2*e2*e2+(double)31185/13072*e2*e2*e2*e2*e2;            b1=a1*a*(1-e2);            b2=(double)-1/2*a2*a*(1-e2);            b3=(double)1/4*a3*a*(1-e2);            b4=(double)-1/6*a4*a*(1-e2);            c0=b1;            c1=2*b2+4*b3+6*b4;            c2=-(8*b3+32*b4);            c3=32*b4;            s=c0*B+cos(B)*(c1*sin(B)+c2*sin(B)*sin(B)*sin(B)+c3*sin(B)*sin(B)*sin(B)*sin(B)*sin(B));            x=s+(double)1/2*N*t*m*m+(double)1/24*(5-t*t+9*q2+4*q2*q2)*N*t*m*m*m*m+(double)1/720*(61-58*t*t+t*t*t*t)*N*t*m*m*m*m*m*m;            y=N*m+(double)1/6*(1-t*t+q2)*N*m*m*m+(double)1/120*(5-18*t*t+t*t*t*t-14*q2-58*q2*t*t)*N*m*m*m*m*m;            y=y+1000000*prjno+500000;            pcc.x = x;            pcc.y = y-38000000;            pcc.z = 0;                }    double sin(double args){        return Math.sin(args);    }    double cos(double args){        return Math.cos(args);    }    double sqrt(double args){        return Math.sqrt(args);    }    double tan(double args){        return Math.tan(args);    }}
  相关解决方案