| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Picard Master


Registrado: 18 Ene 2004Mensajes: 218Ubicación: Palamos (Girona) España
|
Publicado: Lun 12 Jul, 2004 8:46 pm Asunto: Donde esta el fallo? |
|
|
| Código: |
{
cosL = ((Latitude)+(LatCur)/2);
Alfa = atan(Latitude)-(LatCur)/(Longitude)-(LongCur)* cosL;
dist = ((Longitude)-(LongCur)* cosL / cos (Alfa));
dist = dist * 60 * 1852;
lblDistCur->Caption = dist;
}
|
con esta operacion intento calcular la distancia entre dos puntos mediante latitudes y longitudes, no me genera ningun error de compilacion pero al ejecutar me salta un error "Floating point division by zero" no tengo demasiada idea , a ver si alguien me echa un cable.
por cierto declaro cosL Alfa y dist como int.
Gracias machotes _________________ El hombre es el unico ser que tropieza dos veces en la misma piedra ( en mi caso infinitas veces) |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Lun 12 Jul, 2004 8:58 pm Asunto: |
|
|
no se exactamente como será la fórmula pero estas teniendo en cuenta los paréntesis bien?
cosL = ((Latitude)+(LatCur)/2);
por ejemplo una cosa es eso y otra cosa es:
cosL=(Latitude+LatCur)/2 |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Lun 12 Jul, 2004 9:18 pm Asunto: |
|
|
Hola,
Ese error de lo da porque esta dividiendo por cero.
Comprueba los valores que te da.
Para ello, crea un punto de ruptura (breakpoint). Te colocas sobre la linea en la cual deseas parar el programa (por ejemplo al principo de esa funcion, en el cosL) y vas al menu Run -> Add breeakpoint -> Source Breakpoint y Ok. Berras que se pone la linea en rojo. Si pulsa sobre el ponto rojo de la izquierda, lo quitas. (Dejalo, no lo quites).
A continuacion, ejecuta el programa y veras que al llegar a esa linea el programa se para.
A continuacion, pon los valores a comprobar. Para ello ve a Run -> Add Watch y en expresion pon lo que quieres verificar por ejemplo cosL. Pon todas las expresiones que desees.
Una vez tienes el programa parado, ejecutalo linea a linea (pulsa f8 ) y verifica estos valores. Asi podras ver donde falla el programa.
Otra cosa para evitar fallos de programa es mejor poner
| Código: |
try
{
... expresion a evaluar.
}
catch ( ... )
{
... lo que debe hacer en caso de fallo
}
|
Un saludo. |
|
| Volver arriba |
|
 |
Picard Master


Registrado: 18 Ene 2004Mensajes: 218Ubicación: Palamos (Girona) España
|
Publicado: Lun 12 Jul, 2004 10:40 pm Asunto: |
|
|
Bueno, los problemas se solventan, pero voy a complicarlo mas,esta formula ha de darme mas exactitud, pero no se como representar ^2.
[code]
d=2*asin(sqrt((sin((lat1-lat2)/2))^2 +
cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))
%5ouܙcode] _________________ El hombre es el unico ser que tropieza dos veces en la misma piedra ( en mi caso infinitas veces) |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Lun 12 Jul, 2004 10:54 pm Asunto: |
|
|
| prueba con sqrt (1/2) ekivale al cuadrao no? |
|
| Volver arriba |
|
 |
AarzaK Cdt


Registrado: 13 May 2004Mensajes: 21
|
Publicado: Lun 12 Jul, 2004 11:43 pm Asunto: prueba con... |
|
|
Asi sirve y con pow(x,2) tambien si son valores muy grandes usa powl espero que asi sea, disculpa si me equivoco casi no recuerdo el prototipo de la funcion
seria asi:
w=pow(asin(sqrt((sin((lat1-lat2)/2)),2)
q=pow(cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2),2)
w= 2*w + q _________________ I was sent....
aarzak_@hotmail.com
http://aarzak.fadlan.com |
|
| Volver arriba |
|
 |
|