Java - Problema con formula

 
Vista:

Problema con formula

Publicado por David (2 intervenciones) el 21/12/2019 10:06:25
Hola a todos,
Tengo un problema con el programa que estoy haciendo a la hora de introducir una formula.
La formula que me han pasado en Excel, y seria la siguiente:
=(radioPolar/(1+e2*(COS(fi))^2)^(1/2))*0,9996
En java a mi manera de entender:
double ni = (double) ((double) (radioPolar/(1+e2*(Math.pow((Math.pow(Math.cos(fi), 2)), 0.5))*0.9996)));
He probado desglosándola, cambiando paréntesis de lugar y no hay manera, me he quedado encallado.
Agradezco de antemano cualquier tipo de ayuda u orientación.

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de pablo
Val: 626
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con formula

Publicado por pablo (239 intervenciones) el 21/12/2019 16:02:51
Hola David podrías intentarlo de está manera con los respectivos valores que tienes para probar si te funciona

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
 
    public static void main(String[] args) {
 
        double radioPolar, fi, e2;
 
        radioPolar = 3.4;
        fi = 2.3;
        e2= 3.4;
 
        double ni = (double)(radioPolar/(1+(e2*(Math.sqrt(Math.pow(Math.cos(fi),2)))*0.9996)));
 
        System.out.println("Este es mi resultado" +ni);
 
 
    }
}

Cualquier cosa avisas.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con formula

Publicado por Lawliet (303 intervenciones) el 21/12/2019 21:46:37
Hola!!!

Lo mejor hubiera sido que colocarás un resultado de ejemplo y comparar el resultado entre Excel y Java y así llegar a la misma conclusión, prueba la siguiente formula y nos comentas.

1
2
3
4
5
6
public static void main(String[] args) {
	// (radioPolar/(1+e2*(COS(fi))^2)^(1/2))*0,9996
	double radioPolar = 0, e2 = 0, fi = 0;
	double ni = (radioPolar/Math.pow(1+e2*Math.pow(Math.cos(fi),2),1/2))*0.9996;
	System.out.println(ni);
}


Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos! :3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con formula

Publicado por David (2 intervenciones) el 22/12/2019 00:07:07
Buenas,
Teneis toda la razon con respecto a la falta de datos.
Me explico mejor, esto es para convertir datos UTM a cordenadas decimales.
Con un conversor de excel, obtuve las siguientes formulas:
UTMX → Valor a introducir
UTMY → Valor a introducir
semiejeMayor → 6378137
semiejeMenor → 6356752,314
excentridad → (semiejeMayor2 - semiejeMenor2/ semiejeMayor
excentridadE → (semiejeMayor2 - semiejeMenor2/ semiejeMenor
e2→excentricidadE^2
radioPolar → (63781372)/(6356752,314)
huso → 31
hemisferio → N
fi → (ySurEcuador)/(6366197,724*0,9996)
ni → (radioPolar/(1+e2*(COS(fi))^2)^(1/2))*0,9996 -- REPASSAR
fiRadianes → FI+(1+e2*(COS(fi))^2-(3/2)*e2*SIN(fi)*COS(fi)*(tau-fi))*(tau-fi)
meridianoCentral → 6*huso-183
YSurEcuador → utmY
a → (UTMX-500000)/ni
a1 → SIN(2*fi)
a2 → a1*(COS(fi))^2 -- REPASAR
j2 → fi+(a1/2)
j4 → (3*j2+a2)/4
j6 → (5*j4+a2*(COS(fi))^2)/3
alfa → (3/4)*e2
beta → (5/3)*(alfa)^2
gamma → (35/27)*(alfa)^3
bFi → 0,9996*radioPolar*(fi-(alfa*j2)+(beta*j4)-(gamma*j6))
b → (ySurEcuador-bFi)/ni
zeta → ((e2*a^2)/2)*(COS(fi))^2
xi → a*(1-(zeta/3))
eta → b*(1-zeta)+fi
senHXi → (EXP(xi)-EXP(-xi))/2
deltaLambda → ATAN(senHXi/COS(eta))
tau → ATAN(COS(deltaLambda)*TAN(eta)) -- REPASAR
latitud → +(fiEnRadianes/PI())*180
longitud → +(deltaLambda/PI())*180+meridianoCentral

Que pasado a JAVA, seria una cosa similar a:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
float coorX = Float.parseFloat (JOptionPane.showInputDialog(null, "Introduce la coordenada X"));
float coorY = Float.parseFloat (JOptionPane.showInputDialog(null, "Introduce la coordenada Y"));
int huso = 31;
String hemisferio = "N";
double semiejeMayor = (float) 6378137;
double semiejeMenor = (float) 6356752.31424518;
double excentridad = (double) Math.sqrt(Math.pow(semiejeMayor, 2) - Math.pow(semiejeMenor, 2)) / semiejeMayor;
double excentridadE = (double) Math.sqrt(Math.pow(semiejeMayor, 2) - Math.pow(semiejeMenor, 2)) / semiejeMenor;
double e2 = (double) Math.pow(excentridadE, 2);
double radioPolar = (double) (Math.pow(6378137, 2) / 6356752.314);
double fi = (double) (coorY/(6366197.724*0.9996));
double ni = (double)(radioPolar/(1+(e2*(Math.sqrt(Math.pow(Math.cos(fi),2)))*0.9996)));
double a = (double)  (coorX - 500000)/ni;
double a1 = (double) Math.sin(2*fi);
double a2 = (double) a1*Math.pow(Math.cos(fi), 2);
double zeta = (double) ((e2*Math.pow(a2, 2))/2)*Math.pow(Math.cos(fi),2);
double xi = (double) a*(1-(zeta/3));
double ySurEcuador = (double) coorY;
double j2 = (double) fi+(a1/2);
double j4 = (double) (3*j2+a2)/4;
double j6 = (double) (5*j4+a2*Math.pow(Math.cos(fi), 2))/3;
double alfa = (double) 0.75*e2;
double beta = (double) 1.666666667*Math.pow(alfa, 2);
double gamma = (double) 1.296296296*Math.pow(alfa, 3);
double bFi = (double) 0.9996*radioPolar*(fi-(alfa*j2)+(beta*j4)-(gamma*j6));
double b = (double) (ySurEcuador-bFi)/ni;
double eta = b*(1-zeta)+fi;
double senHXi = (double) (Math.exp(xi)-Math.exp(-xi))/2;
double deltaLambda = (double) Math.atan(senHXi) / Math.cos(eta);
double tau = (double) Math.atan((Math.cos(deltaLambda))*Math.tan(eta));
double fiRadianes = (double) fi+(1+e2*Math.pow(Math.cos(fi), 2)-1.5*e2*Math.sin(fi)*Math.cos(fi)*(tau-fi))*(tau-fi);
double meridianoCentral = (double) (6*huso-183);
double latitud = (double) +(fiRadianes/Math.PI)*180;
double longitud = (double) +((deltaLambda/Math.PI)*180 + meridianoCentral);
String latitudKML = Double.toString(latitud);
String longitudKML = Double.toString(longitud);
 
System.out.println("latitud: " + latitud);
System.out.println("longitud: " + longitud);

El problema es que el resultado es diferente, no acabo de encontrar donde me he podido equivocar o que no acabo de entender.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de pablo
Val: 626
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con formula

Publicado por pablo (239 intervenciones) el 22/12/2019 14:19:00
Hola David, podrías imprimir cada una de esas formulas que tienes con un System.out.println y corroborar que te va dando el resultado de lo que vas necesitando, esto lo puedes hacer sí tienes el resultado de cada una de las variables que estas calculando.
Para ver en que formula falla
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar