2
Java에서 내 응용 프로그램에 문제가 있습니다. 나는 지구상에서 3 점과 3 점의 거리를 가지고 있으며 4 점을 찾아야합니다. 제 코드에서는 위키 피디 어 (wikipedia)의 삼중 항을 사용하여 삼중 항을 계산했습니다. 해결책은 49.195167,16.607208이어야합니다 (Google지도의 GPS).3D 삼각 측량 Java
누군가가 코드에서 실수를 찾도록 도울 수 있다면 매우 기쁩니다. 잘못된 GPS를 계산하기 때문입니다.
정말 고마워요! 솔루션이 없을 수단 먼저
float earthR = 6371;
float p1x = (float) 61.47;
float p1y = (float) 23.76;
float p2x = (float) 42.80;
float p2y = (float) -1.63;
float p3x= (float) 39.67;
float p3y= (float) 20.85;
float r1 = 1470;
float r2 = 1617;
float r3 = 1127;
float P1x = (float) (earthR*(Math.cos(Math.toRadians(p1x))*Math.cos(Math.toRadians(p1y))));
float P1y = (float) (earthR*(Math.cos(Math.toRadians(p1x))*Math.sin(Math.toRadians(p1y))));
float P1z = (float) (earthR*(Math.sin(Math.toRadians(p1x))));
float P2x = (float) (earthR* (Math.cos(Math.toRadians(p2x))*Math.cos(Math.toRadians(p2y))));
float P2y = (float) (earthR*(Math.cos(Math.toRadians(p2x))*Math.sin(Math.toRadians(p2y))));
float P2z = (float) (earthR*(Math.sin(Math.toRadians(p2x))));
float P3x = (float) (earthR* (Math.cos(Math.toRadians(p3x))*Math.cos(Math.toRadians(p3y))));
float P3y = (float) (earthR*(Math.cos(Math.toRadians(p3x))*Math.sin(Math.toRadians(p3y))));
float P3z = (float) (earthR*(Math.sin(Math.toRadians(p3x))));
float exx = (float) ((P2x-P1x)/Math.sqrt(Math.pow(P2z-P1z, 2)+Math.pow((P2x-P1x),2)+Math.pow((P2y-P1y),2)));
float exy = (float) ((P2y-P1y)/Math.sqrt(Math.pow(P2z-P1z, 2)+Math.pow((P2x-P1x),2)+Math.pow((P2y-P1y),2)));
float exz = (float) ((P2z-P1z)/Math.sqrt(Math.pow(P2z-P1z, 2)+Math.pow((P2x-P1x),2)+Math.pow((P2y-P1y),2)));
float EX = (float) Math.sqrt(Math.pow(exx, 2)+Math.pow(exy, 2)+Math.pow(exz,2));
float i = (float) Math.sqrt(Math.pow((P3x-P1x)*EX, 2)+Math.pow((P3y-P1y)*EX, 2)+Math.pow((P3z-P1z)*EX, 2));
float eyx = (float) ((P3x-P1x-(i*exx))/Math.sqrt((Math.pow(P3z-P1z-(i*exz),2))+(Math.pow(P3x-P1x-(i*exx),2))+(Math.pow(P3y-P1y-(i*exy),2))));
float eyy = (float) ((P3y-P1y-(i*exy))/Math.sqrt((Math.pow(P3z-P1z-(i*exz),2))+(Math.pow(P3x-P1x-(i*exx),2))+(Math.pow(P3y-P1y-(i*exy),2))));
float eyz = (float) ((P3z-P1z-(i*exz))/Math.sqrt((Math.pow(P3z-P1z-(i*exz),2))+(Math.pow(P3x-P1x-(i*exx),2))+(Math.pow(P3y-P1y-(i*exy),2))));
float EY = (float) Math.sqrt(Math.pow(eyx, 2)+Math.pow(eyy, 2)+Math.pow(eyz, 2));
float ezx = (exy*eyz)-(exz*exy);
float ezy = (exz*eyx)-(exx*eyz);
float ezz = (exx*eyy)-(exy*eyx);
float EZ = (float) Math.sqrt(Math.pow(ezx, 2)+Math.pow(ezy, 2)+Math.pow(ezz, 2));
float d = (float) Math.sqrt((Math.pow(P2x-P1x,2))+(Math.pow(P2y-P1y,2))+Math.pow(P2z-P1z, 2));
float j = (float) Math.sqrt(Math.pow((P3x-P1x)*EY, 2)+Math.pow((P3y-P1y)*EY, 2)+Math.pow((P3z-P1z)*EY, 2));
float x = (float) ((Math.pow(r1, 2)-Math.pow(r2, 2)+Math.pow(d, 2))/(2*d));
float y = (float) (Math.pow(r1, 2)-Math.pow(r3, 2)+Math.pow(i, 2)+Math.pow(j, 2))/(2*j)- (i*x/j);
float z1 = (float) (Math.pow(r1,2) - Math.pow(x,2) - Math.pow(y,2));
if (z1<0){ z1 = z1*(-1);}
float z = (float) Math.sqrt(z1);
float lat = (float) Math.toDegrees(Math.atan2(y,x));
float lon = (float) Math.toDegrees(Math.asin((z)/earthR));
System.out.println(lat);
System.out.println(lon);