URE foro pequeñas
Busco Ecuacion mate...
 
Notificaciones
Limpiar todo

Busco Ecuacion matematica para calcular distancias

EA7HV
Mensajes: 527
#802  - 16 julio, 2008 00:27 

Pues eso, saludo a los lectores..

Siguiendo el hilo de programación en VBasic o VBNet, necesito para mi aplicación, las
ecuaciones matemáticas para calcular distancias o rumbos entre dos locators o latitud/longitud.
Hace ya algún tiempo tuve algo en lenguaje Clipper que me envió un responsable del viejo Ureloc pero he perdido su
rastro por mucho que miro en mis viejos CDs copias de anteriores discos duros.

No me importa si me enviáis cualquier código que contenga las ecuaciones; pascal, c, vb, vbnet, php, asp, etc
ya me las apañaría yo..

tnx..

J.Rivero EA7HV-IM77HL
Solo MAF 50, 144, 432 Mhz, proximamente 70 y 1200 Mhz.

ResponderCitar
Inició el tema
EA5SE
Mensajes: 47
#43870  - 16 julio, 2008 09:53 

Hola.

Este es el primer programa para el calculo de distancias entre locators que me hice en BASIC en un VIC-20, creo que lo fuí adaptando hasta W-95. A partir de entonces como fueron saliendo programas más completos en los libros de guardia ya dejé de actualizarlo, pero de aquí puedes sacar las formulas de orto que te interesen.

1 REM Programa calculo distancia entre locators EA5SE Hermogenes
2 SCREEN 0
5 COLOR 1, 2, 3
10 CLS
13 DIM A(6)
15 KEY OFF
20 PI=3.14159265#:W=0:LO=0:LA=0:U=0:V=0:D=0:T=0
30 INPUT "INTRODUCCA LOCATOR PROPIO"; A$: V=0: AP$=A$: GOTO 60
40 INPUT "INTRODUCCA LOCATOR CORRESPONSAL";A$:LATI=0:LONG=0
50 PRINT
60 FOR K=1 TO 6
70 A(K)=ASC(MID$(A$,K,1))
80 NEXT K
90 LONGA=(-180+((A(1)-65)*20))
100 LONGB=((A(3)-48)*2)
110 LONGC=((A(5)-64.5)/12)
120 LONG=LONGA+LONGB+LONGC
130 LO=LONG*PI/180
140 LATI=-90+(A(2)-65)*10+(A(4)-48)+(A(6)-64.5)/24
150 LA=LATI*PI/180
160 IF V0 THEN 180
170 U=LA:V=LO:LONGP=LONG:LATIP=LATI:GOTO 40
180 Z=LO-V
190 D=COS(Z)*COS(U)*COS(LA)+SIN(U)*SIN(LA)
200 TA=(-ATN(D/SQR(-D*D+1+1E-09))+PI/2)
210 KM=111.12*TA*180/PI
220 PRINT "DESDE " AP$ " A " A$ " HAY " INT (KM) " KILOMETROS.ú
230 PRINT
240 KO=((SIN(Z)*COS(U))/SIN(TA))
250 KL=ATN(KO/SQR(-KO*KO+1))
260 KG=ABS(INT(KL*180/PI))
270 IF LONG >= LONGP AND LATI < LATIP THEN KG=180-KG
280 IF LONG < LONGP AND LATI < LATIP THEN KG=KG+180
290 IF LONG LATIP THEN KG=360-KG
300 PRINT "RUMBO DE ANTENA" KG " GRADOS NORTE."
310 PRINT
320 IF LATI > 0 THEN PRINT "SITUACION " LATI " GRADOS NORTE." ELSE PRINT "SITUACION " LATI " GRADOS SUR."
330 PRINT
340 IF LONG > 0 THEN PRINT "SITUACION " LONG " GRADOS ESTE." ELSE PRINT "SITUACION " LONG " GRADOS OESTE."
350 GOTO 40

73 de Hermógenes - EA5SE.

Nota: Perdón el emoticon que mete entre las lineas del programa es una coincidencia de una variable.

En la linea 20. Donde está el emoticon poner dos puntos D todo junto. Así si sale.

Hermógenes - Jumilla - IM98IL
www.ea5se.com
correo@ea5se.com

ResponderCitar
EA4K
 EA4K
Mensajes: 201
#43871  - 17 julio, 2008 18:50 

En KLog tienes el cálculo de distancias en C.
No es tu lenguaje pero lo entenderás ;-)
http://jaime.robles.es/klog

73 de EA4TV.

ResponderCitar
EA7HV
Mensajes: 527
#43878  - 18 julio, 2008 08:44 

Gracias por tu código Hermógenes..

lo he adaptado perfectamente a VBasic y me funciona correctamente, además he echo comparativas en cálculos reales y me lo devuelve 'clavao', también he comparado resultados ficticios con Winurecon. Solo hay un error en la línea 280, pero de fácil solución;

280 IF LONG < LONGP AND LATI < LATIP THEN KG=KG+180

que debe ser (de momento)..

280 IF LONG < LONGP AND LATI <= LATIP THEN KG=KG+180

Saludos y gracias..

J.Rivero EA7HV-IM77HL
Solo MAF 50, 144, 432 Mhz, proximamente 70 y 1200 Mhz.

ResponderCitar
Inició el tema
EA5SE
Mensajes: 47
#43872  - 18 julio, 2008 09:48 

Hola a todos.

J. Rivero, me alegro que te haya sido de utilidad. Esa rutina la hice por el año 81 u 82 todavía con el locator antiguo, después la modifiqué cuando salió el actual y estuve varios años trabajando con él, lo cierto es que entonces había que ingeniárselas mas que ahora ya que no teníamos acceso a la cantidad herramientas que hoy disponemos. E incluso la implementé a varios programas que me hice para la radio.

No me extraña que haya algún gazapo por ahí en medio dado al tiempo que tiene y las veces que lo retoqué, lo recuperé de un diskette que afortunadamente todavia se podía leer.

73 de Hermógenes - EA5SE.

Hermógenes - Jumilla - IM98IL
www.ea5se.com
correo@ea5se.com

ResponderCitar
EA7DFH
Mensajes: 118
#43989  - 21 julio, 2008 21:22 

Aquí tienes una estupenda librería en C# que podrás compilar para usarla directamente en tus aplicaciones .NET (si usas ese framework) o bien extraer las rutinas necesarias y adaptarlas a tu lenguaje.

Yo la uso compilada en una dll en mis programas y va muy bien.

http://beta.unclassified.de/code/dotnet/maidenheadlocator/

Saludos

73 de Jesús
https://vhfchat.eu

ResponderCitar
EA3BRA
Mensajes: 41
#43879  - 25 julio, 2008 18:33 

Apreciado colega: adjunto te remito el programa que utilizo yo desde hace muchos años para calcular rumbos y distancias entre dos QTH LOCATOR. Está algo documentado y verás que, a partir de las coordenadas obtenidas por la resolución del QTH LOCATOR, calcula el rumbo y la distancia mediante la fórmula matemática adecuada. Si lo deseas me puedes enviar un e-mail a ea3bra@ure.es y a la vuelta te envío el intérprete BASIC que "entiente" el programa que te adjunto, aunque cualquier versión antigua de MS-DOS debería tenerlo incorporado, ¿OK? Espero que te sea de utilidad. No lo saqué de ningún sitio, lo hice yo... pero por los años transcurridos ya no me acuerdo como lo hice. Per sigue QRV!!!

10 REM REVISTA DE URE FEBRERO 1985
20 REM ENTRADO POR EA3CIW Y EA3BRA
30 CLS : P=3.14159265#
40 PRINT "LOCATORS" : PRINT
50 PRINT "1.- CONVERSION QTH LOCATOR A LOCATOR WW"
60 PRINT "2.- CONVERSION LONG. Y LAT. A LOCATOR WW"
70 PRINT "3.- CONVERSION LOCATOR WW A LONG. Y LAT."
80 PRINT "4.- CALCULO DISTANCIA Y RUMBO ENTRE LOCATORS"
90 PRINT "0.- SALIDA"
100 PRINT : INPUT "OPCION ? ",Z$
110 IF LEN(Z$)1 THEN 100
120 IF Z$<"0" THEN 100
130 IF Z$>"4" THEN 100
140 IF Z$="0" THEN 1390
150 O=VAL(Z$)
160 INPUT "AYUDA (S/N)",B$
170 IF B$="S" THEN GOSUB 1000
180 ON O GOTO 190,340,490,640
190 INPUT "QTH LOCATOR ? ",Q$
200 IF (LEN(Q$)7) THEN 960
210 IF (MID$(Q$,4,1)"9") THEN 960
220 IF (MID$(Q$,3,1)"9") THEN 960
230 IF LEN(Q$)=5 THEN K=-25 : L=-65 : GOTO 270
240 IF LEN(Q$)=7 THEN K=-51 : L=-91 : GOTO 270
250 IF MID$(Q$,6,1)="W" THEN K=-25 : L=-91 : GOTO 270
260 IF MID$(Q$,6,1)="S" THEN K=-51 : L=-65
270 DATA 3,5,5,5,5,3,5,1,3,1,1,1,1,3,1,5,0,0,3,3
280 FOR F=1 TO ASC(MID$(Q$,5,1))-64 : READ U1,U2 : NEXT F : RESTORE
290 N1=VAL(MID$(Q$,3,1)) : N2=VAL(MID$(Q$,4,1)) : IF N20 THEN 310
300 N1=N1-1 : N2=10
310 X=K+ASC(MID$(Q$,2,1))+1-(N1+1)/8+U2/48
320 Y=2*(ASC(MID$(Q$,1,1))+L)+(N2-1)/5+U1/30
330 GOTO 380
340 PRINT "LONGITUD (GRADOS,MINUTOS,SEGUNDOS,E/W)";
350 Z=1 : GOSUB 1280 : IF E=1 THEN 340 ELSE Y=Z
360 PRINT "LATITUD (GRADOS,MINUTOS,SEGUNDOS,N/S)";
370 Z=0 : GOSUB 1280 : IF E=1 THEN 360 ELSE X=Z
380 L1=Y : L2=X : REM L1=LONG. L2=LAT.
390 L1=(L1+180)/20 : L2=(L2+90)/10
400 A=INT(L1) : B=INT(L2)
410 L1=(L1-A)*10 : L2=(L2-B)*10
420 C=INT(L1) : D=INT(L2)
430 A$=CHR$(A+65)+CHR$(B+65)+CHR$(C+48)
440 A$=A$+CHR$(D+48)
450 A$=A$+CHR$(INT((L1-C)*24)+65)
460 A$=A$+CHR$(INT((L2-D)*24)+65)
470 PRINT "LOCATOR =";A$
480 GOTO 970
490 INPUT "LOCATOR ? ",A$
500 IF LEN(A$)6 THEN 960
510 FOR K=1 TO 6 : A(K)=ASC(MID$(A$,K,1))
520 NEXT K
530 L1=-180+(A(1)-65)*20+(A(3)-48)*2+(A(5)-64.5)/12
540 L2=-90+(A(2)-65)*10+(A(4)-48)+(A(6)-64.5)/24
550 Y$="E" : IF L1<0 THEN Y$="W" : L1=ABS(L1)
560 X$="N" : IF L2<0 THEN X$="S" : L2=ABS(L2)
570 Y1=INT(L1) : Y2=INT((L1-Y1)*60)
580 Y3=INT((L1-Y1-Y2/60)*3600+.5)
590 X1=INT(L2) : X2=INT((L2-X1)*60)
600 X3=INT((L2-X1-X2/60)*3600+.5)
610 PRINT "LONG.="+STR$(Y1)+"Gr. "+STR$(Y2)+"' "+STR$(Y3)+CHR$(34)+" "+Y$
620 PRINT "LAT. ="+STR$(X1)+"Gr. "+STR$(X2)+"' "+STR$(X3)+CHR$(34)+" "+X$
630 GOTO 970
640 REM***DISTANCIA Y RUMBO
650 INPUT "LOCATOR ORIGEN ? ",A$
660 IF LEN(A$)6 THEN 960
670 V=0 : GOTO 700
680 INPUT "LOCATOR CORRESPONSAL ? ",A$
690 IF LEN(A$)6 THEN 960
700 FOR K=1 TO 6 : A(K)=ASC(MID$(A$,K,1))
710 NEXT K
720 L1=(-180+(A(1)-65)*20+(A(3)-48)*2+(A(5)-64.5)/12)*P/180
730 L2=(-90+(A(2)-65)*10+(A(4)-48)+(A(6)-64.5)/24)*P/180
740 IF V0 THEN 760
750 U=L2 : V=L1 : GOTO 680
760 Z=L1-V
770 D=COS(Z)*COS(U)*COS(L2)+SIN(U)*SIN(L2)
780 T=(-ATN(D/SQR(-D*D+1+.000000001#))+P/2)
790 W=INT(111.2*T*180/P+.5)
800 PRINT "DISTACIA (KM.)=";W
810 F=0
820 G=(SIN(L2)-SIN(U)*COS(T))/(SIN(T)*COS(U)) : GOTO 850
830 REM URE ABRIL 85
840 G=SIN(Z)*COS(L2)/SIN(T)
850 H=(-ATN(G/SQR(-G*G+1+.000000001#))+P/2)*180/P
860 IF SIN(Z)<0 THEN H=360-H
870 H1=H : GOTO 940
880 IF F=0 THEN F=9000000000# : L2=L2+.001#*P/180 : H1=H : GOTO 840
890 IF ABS(H1)>ABS(H) THEN 920
900 IF H1>0 THEN H1=180-H1
910 IF H1<0 THEN H1=-(H1+180)
920 IF H1<0 THEN H1=360+H1
930 IF H1=0 THEN IF U-L2+.000000001#*P/180>0 THEN H1=180
940 PRINT "RUMBO=";INT(H1+.5)
950 GOTO 970
960 PRINT "ENTRADA INCORRECTA"+CHR$(7)
970 INPUT "OTRO CALCULO (S/N)",B$
980 IF B$="S" THEN 180
990 GOTO 10
1000 PRINT : ON O GOTO 1030,1180,1220,1010
1010 PRINT "NO IMPLEMENTADA AUN..."
1020 RETURN
1030 PRINT "EL ANTIGUO QTH LOCATOR SE HA DE ENTRAR DE LA SIGUIENTE MANERA:"
1040 PRINT "- AL NORTE DE LOS 40 GRADOS DE LATITUD Y AL ESTE DE LOS 0 GRADOS"
1050 PRINT " DE LONGITUD SE ENTRA NORMAL (5 CARACTERES)"
1060 PRINT "- AL NORTE DE LOS 40 GRADOS DE LATITUD Y AL OESTE DE LOS 0 GRADOS"
1070 PRINT " DE LONGITUD SE ENTRA CON UNA 'W' AL FINAL"
1080 PRINT "- AL SUR DE LOS 40 GRADOS DE LATITUD Y AL ESTE DE LOS 0 GRADOS"
1090 PRINT " DE LONGITUD SE ENTRA CON UNA 'S' AL FINAL"
1100 PRINT "- AL SUR DE LOS 40 GRADOS DE LATITUD Y AL OESTE DE LOS 0 GRADOS"
1110 PRINT " DE LONGITUD SE ENTRA CON UNA 'SW' AL FINAL." PRINT
1120 PRINT "NOTA: PIENSA QUE LA NUEVA CUADRICULA NO COINCIDE EXACTAMENTE CON LA"
1130 PRINT " ANTIGUA (EN LONGITUD) Y QUE QUIZAS LA PENULTIMA LETRA OBTENI-"
1140 PRINT " DA CON ESTE PROGRAMA NO SEA EXACTAMENTE LA DE TU DOMICILIO."
1150 PRINT " PARA MAYOR EXACTITUD, UTILIZA LA OPCION '2', QUE TE LO CALCU-"
1160 PRINT " LARA A PARTIR DE LAS COORDENADAS GEOGRAFICAS."
1170 GOTO 1260
1180 PRINT "ENTRE LAS COORDENADAS SEPARANDO ENTRE COMAS LOS GRADOS, MINUTOS,";
1190 PRINT "SEGUNDOS, ORIENTACION. LA ORIENTACION ES ESTE ('E') U OESTE ('W') ";
1200 PRINT "PARA LA LONGITUD Y NORTE ('N') O SUR ('S') PARA LA LATITUD."
1210 GOTO 1260
1220 PRINT "EN BASE AL LOCATOR ENTRADO SE DAN LAS COORDENADAS DEL CENTRO ";
1230 PRINT "DE LA SUBCUADRICULA. LAS COORDENADAS SE REFLEJAN EN GRADOS, ";
1240 PRINT "MINUTOS, SEGUNDOS Y ORIENTACION (NORTE, SUR, ESTE U OESTE)."
1250 GOTO 1260
1260 PRINT : INPUT "PULSA UNA TECLA...",X$
1270 RETURN
1280 REM: ACEPTACION Y VALIDACION COORDENADAS
1290 INPUT Z1,Z2,Z3,Z$ : IF Z1<0 THEN 1370
1300 IF Z2<0 THEN 1370 ELSE IF Z3<0 THEN 1370
1310 IF Z1>180 THEN 1370 ELSE IF Z2>60 THEN 1370
1320 IF Z3>60 THEN 1370 ELSE IF Z=0 THEN 1340
1330 IF INSTR("EW",Z$)=0 THEN 1370 ELSE GOTO 1350
1340 IF INSTR("NS",Z$)=0 THEN 1370
1350 Z=Z1+(Z2+Z3/60)/60 : IF INSTR("SW",Z$)>0 THEN Z=Z*(-1)
1360 E=0 : GOTO 1380
1370 PRINT CHR$(7)+"?LOCATO-W-Error en coordenadas; repita." : E=1
1380 RETURN
1390 END

ResponderCitar

QDURE - https://qsl.ure.es


Imprime y confirma tus QSL en tan solo tres click.

Nunca fue tan fácil y cómodo
el confirmar tus contactos.

TIENDA ONLINE URE


Publicaciones, mapas, polos, camisetas, gorras, tazas, forros polares y mucho más...

WEBCLUSTER EA4URE


Conoce el nuevo WebCluster de URE, ahora con nuevos filtros e información y compatible con GDURE