Thanks for the quick answer.
And for the code optimizing, its only a short extract of a gps program.
I know there's much more optimizing needed...
I'll do it later ^^
Now i've a problem with sin-function, e.g. in line 15.
why isn't it possible to convert it with float(...)?
double n = a/sqrt(1-e2*sq(sin(float(br/180*PI))));
- double br_grad=47;
- double br_min=39;
- double br_sek=19.33;
- double la_grad=10;
- double la_min=4;
- double la_sek=3.97;
- double hohe= 4.21;
- int syst=5;
- final double a= 6378137;
- final double b= 6356752.314;
- final double a2= a*a;
- final double e2= (a2-b*b)/(a2);
- double br= br_grad + br_min/60 + br_sek/3600;
- double la= la_grad + la_min/60 + la_sek/3600;
- double n = a/sqrt(1-e2*sq(sin(br/180*PI)));
- double x = (n+hohe)*cos(br/180*PI)*cos(la/180*PI);
- double y = (n+hohe)*cos(br/180*PI)*sin(la/180*PI);
- double z = (n*sq(b)/sq(a)+hohe)*sin(br/180*PI);
- double[][] tp=new double[5][8];//Tabelle4 eingeben (ohne Region)
- for(int i=0; i<5; i++) {
- tp[i][0]=i+1;
- }
- tp[0][1]=582.0;
- tp[0][2]=105.0;
- tp[0][3]=414.0;
- tp[0][4]=-1.040;
- tp[0][5]=-0.350;
- tp[0][6]=3.080;
- tp[0][7]=8.300;
- tp[1][1]=598.1;
- tp[1][2]=73.7;
- tp[1][3]=418.2;
- tp[1][4]=-0.202;
- tp[1][5]=-0.045;
- tp[1][6]=2.455;
- tp[1][7]=6.700;
- tp[2][1]=584.8;
- tp[2][2]=67.0;
- tp[2][3]=400.3;
- tp[2][4]=-0.105;
- tp[2][5]=-0.013;
- tp[2][6]=2.378;
- tp[2][7]=10.290;
- tp[3][1]=590.5;
- tp[3][2]=69.5;
- tp[3][3]=411.6;
- tp[3][4]=0.796;
- tp[3][5]=0.052;
- tp[3][6]=3.601;
- tp[3][7]=8.300;
- tp[4][1]=597.1;
- tp[4][2]=71.4;
- tp[4][3]=412.1;
- tp[4][4]=-0.894;
- tp[4][5]=-0.068;
- tp[4][6]=1.563;
- tp[4][7]=7.580;
- double[][] dm=new double[3][3];//Tabelle3 DrehMatrix
- dm[0][0]=1.0;
- dm[0][1]=(-tp[syst-1][6])*PI/180/3600;
- dm[0][2]=-((-tp[syst-1][5])*PI/180/3600);
- dm[1][0]=-dm[0][1];
- dm[1][1]=1.0;
- dm[1][2]=(-tp[syst-1][4])*PI/180/3600;
- dm[2][0]=-dm[0][2];
- dm[2][1]=-dm[1][2];
- dm[2][2]=1.0;
- double[] rv=new double[3];//Tabelle 3 Rotierte Vektoren
- for(int i=0; i<3; i++) {
- rv[i]=x*dm[i][0]+y*dm[i][1]+z*dm[i][2];
- }
- double[] mb=new double[3];//Tabelle 3 Maßstab berücksichtigen
- for(int i=0; i<3; i++) {
- mb[i]=rv[i]*(pow(-tp[syst-1][7], -6)+1);
- }
- double[] ta=new double[3];//Tabelle 3 Translationen anbringen
- for(int i=0; i<3; i++) {
- ta[i]=mb[i]+(tp[syst-1][1]*dm[i][0]+tp[syst-1][2]*dm[i][1]+tp[syst-1][2]*dm[i][2]);
- }
- double veka=6377397.155; //Tabelle 5
- double vekbv=6356078.962;
- double veke2=(veka*veka-vekbv*vekbv)/(veka*veka);
- double veks=sqrt(sq(ta[0])+sq(ta[1]));
- double vekt=atan(ta[2]*veka/(veks*vekbv));
- double vekb=(atan((ta[2]+veke2*sq(veka)/vekbv*pow(sin(vekt),3))/(veks-veke2*veka*pow(cos(vekt),3))))*180/PI;
- double vekl=(atan(ta[1]/ta[0]))*180/PI;
- double ben= (veka-vekbv)/(veka+vekbv);//Tabelle 6 Variablen
- double bealpha= (veka+vekbv)/2*(1+1/4*sq(ben)+1/64*pow(ben,4));
- double bebeta=-3/2*ben+9/16*pow(ben,3)-3/32*pow(ben,5);
- double begamma= 15/16*sq(ben)-15/32*pow(ben,4);
- double bedelta= -35/48*pow(ben,3)+105/256*pow(ben,5);
- double beepsilon= 315/512*pow(ben,4);
- double l0;
- if(abs(vekl-6)<1.5) {
- l0=5;
- }
- else if(abs(vekl-9)<1.5) {
- l0=9;
- }
- else if(abs(vekl-12)<1.5) {
- l0=12;
- }
- else {
- l0=15;
- }
- double bei=(vekl-l0)*PI/180;
- double beb=vekb*PI/180;
- double beng=veka/sqrt(1-veke2*sq(sin(beb)));
- double bens=sqrt(sq(veka)/sq(vekbv)*veke2*sq(cos(beb)));
- double bet=tan(beb);
- double bebl=bealpha*(beb+bebeta*sin(2*beb)+begamma*sin(4*beb)+bedelta*sin(6*beb)+beepsilon*sin(8*beb));
- double beh1=bet/2*beng*sq(cos(beb))*sq(bei);
- double beh2=bet/24*beng*pow(cos(beb),4)*(5-sq(bet)+9*sq(bens)+4*pow(bens,4))*pow(bei,4);
- //double beh3=bet/720*beng*pow(cos(beb),6)*(61-58*sq(bet)+270*sq(bens)-330*sq(bet)*sq(bens))*pow(bei,6);
- //double beh4=bet/40320*beng*pow(cos(beb),8)*(1385-3111*sq(bet)+543*pow(bet,4)-pow(bet,6))*pow(bei,8);
- double hochwert=bebl+beh1+beh2;
- double ber1=beng*cos(bet)*bei;
- double ber2=beng/6*pow(cos(beb),3)*(1-sq(bet)+sq(bens))*pow(bei,3);
- double rechtswert=ber1+ber2+500000+l0/3*1000000;
- println(hochwert+" "+rechtswert);