Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Operaciones algebraicas entre radianes y grados decimales (https://www.clubdelphi.com/foros/showthread.php?t=94615)

compuin 02-02-2020 20:11:36

Conversion Grados a Radianes y retorno
 
Hola amigos,

Tengo un problema, realizando calculos entre grados

Necesito conseguir el producto entre 2 grados, los cuales son

lt := 0° 00' 00"
decl := 23° 24' 15"

Utilizo esta ecuacion para obtener el resultado de multiplicar lt * decl, asi:

Código Delphi [-]
DA, lt, decl : double;

Código Delphi [-]
DA:= RadToDeg(sin(DegToRad(tan(DegToRad(lt))*tan(DegToRad(decl)))));

El resultado que obtengo es 0° 00' 00", pero el valor correcto deberia ser -2° 51' 47"

No entiendo que esta mal en mi calculo

Gracias de antemano por cualquier aporte

Casimiro Noteví 03-02-2020 11:26:04

Multiplicar por cero, da cero.

compuin 03-02-2020 12:33:22

Me disculpo

Utilice el valor no apropiado

El correcto es 45 22’ 35” y no 0 00’ 00”

ecfisa 03-02-2020 17:57:30

Hola.


Tu código con los valores que indicas,
Código Delphi [-]
...
var
  da, lt, decl : Extended;
begin
  lt   := 45.37638888888889; // => 45 22’ 35
  decl := 23.40388888888889; // => 23° 24' 15"
  da   := RadToDeg(sin(DegToRad(tan(DegToRad(lt))*tan(DegToRad(decl)))));
  ShowMessage(da.ToString);
  ...
da el resultado : 0,438539207272871 => 0° 26' 18.74115"

Saludos :)

compuin 03-02-2020 19:00:30

Cita:

Empezado por ecfisa (Mensaje 535522)
Hola.


Tu código con los valores que indicas,
Código Delphi [-]
...
var
  da, lt, decl : Extended;
begin
  lt   := 45.37638888888889; // => 45 22’ 35
  decl := 23.40388888888889; // => 23° 24' 15"
  da   := RadToDeg(sin(DegToRad(tan(DegToRad(lt))*tan(DegToRad(decl)))));
  ShowMessage(da.ToString);
  ...
da el resultado : 0,438539207272871 => 0° 26' 18.74115"

Saludos :)

Me arroja error ejecutando por la clausula ToString

Puedes poner la Unit completa para replicarlo por favor ?

Casimiro Noteví 03-02-2020 20:01:41

Es que depende de la versión de Delphi, prueba con:
Código Delphi [-]
ShowMessage( FloatToStr(da) );

compuin 03-02-2020 20:02:03

Cita:

Empezado por Casimiro Notevi (Mensaje 535527)
Es que depende de la versión de Delphi, prueba con:
Código Delphi [-]
ShowMessage( FloatToStr(da) );

Utilizo Delphi 7

compuin 03-02-2020 20:24:45

Gracias, con eso mostro los datos

El resultado a pesar que se ejecuta no es correcto.

Creo que tengo un problema convirtiendo radianes, grados, decimales


Aqui tengo otro ejemplo



Código Delphi [-]
var
lt, decl, da : double;

La formula es

SIN DA = TAN LT * TAN DECL

Deberia obtener este resultado

Código Delphi [-]
lt:= -2.19474036998329;
           decl:=   -24.7975765404927

El resultado deberia ser

Código Delphi [-]
da:= -3.06365791942224


Aqui es donde no entiendo cuando convertir a radianes, grados o decimales

ecfisa 03-02-2020 20:29:03

Cita:

Empezado por compuin (Mensaje 535528)
Utilizo Delphi 7

Entonces haz como te indica Casimiro ;)

Saludos :)

compuin 03-02-2020 20:32:00

Cita:

Empezado por ecfisa (Mensaje 535531)
Entonces haz como te indica Casimiro ;)

Saludos :)

Ya lo hice y muesta el mensaje

escafandra 04-02-2020 00:17:57

Cita:

Empezado por compuin (Mensaje 535530)
La formula es

Código Delphi [-]
SIN DA = TAN LT * TAN DECL

Deberia obtener este resultado

Código Delphi [-]
lt:=    -2.19474036998329; 
decl:= -24.7975765404927


El resultado deberia ser
Código Delphi [-]
da:= -3.06365791942224

Aqui es donde no entiendo cuando convertir a radianes, grados o decimales




Por partes:
1- Según la formula que pones DA = ARCSIN(TAN LT * TAN DECL) pero eso no lo veo en el código que debería ser algo como:
Código Delphi [-]
var
  DA, lt, decl : extended;
begin
  lt:=    -2.19474036998329;
  decl:= -24.7975765404927;

  DA:= RadToDeg(arcsin(tan(DegToRad(lt))*tan(DegToRad(decl))));
end;
Eso siempre que los datos sean grados y el resultado también.


2.- Los ángulos que das están ambos en el 4º cuadrante y su tangente será negativa para ambos. El producto de las tangentes será positivo y eso significa si, o si que es seno de DA es positivo, luego DA está en el primer o segundo cuadrante, con lo que no va a ser negativo del orden que das (-3.06365791942224).

3.- Con las conclusiones obtenidas tenemos, que la fórmula que das es incorrecta, o que el código lo es, ambas cosas o que los datos no son grados, en cuyo caso serían radianes pero considerando esto último, tampoco da -3.06365791942224.

4.- Debes revisar bien el planteamiento que das, las matemáticas no fallan y los ordenadores tampoco.


Saludos.

compuin 04-02-2020 01:11:53

Ok

Voy a revisar todo de nuevo y lo vuelvo a postear

compuin 04-02-2020 02:06:10

Retomo el post

Necesito calcular DA (Diferencia Ascensional) de un planeta. Estos son los valores a usar

Latitud = 02º45'20''

Declinacion = 23º41'12''

Formula para calcular

TAN (latitud) * TAN (DECL planeta ) = SIN DA

El resultado debe dar = 04º39'38''

Cual es la forma de hacerlo correctamente en Delphi ?

Casimiro Noteví 04-02-2020 11:11:31

Cita:

Empezado por compuin (Mensaje 535539)
Cual es la forma de hacerlo correctamente en Delphi ?

¿Cómo lo harías con papel y lápiz?
Paso a paso, ¿cómo lo harías?

compuin 04-02-2020 11:14:29

Con papel y lápiz en el mismo orden de la ecuación

Pero en código no me funciona de esa manera

escafandra 04-02-2020 18:42:04

Cita:

Empezado por compuin (Mensaje 535539)
Retomo el post

Necesito calcular DA (Diferencia Ascensional) de un planeta. Estos son los valores a usar

Latitud = 02º45'20''

Declinacion = 23º41'12''

Formula para calcular

TAN (latitud) * TAN (DECL planeta ) = SIN DA

El resultado debe dar = 04º39'38''

Cual es la forma de hacerlo correctamente en Delphi ?

Pues si la calculadora de mi teléfono no falla, el resultado es 01° 12' 35,5"
No tengo delphi a mano.

Saludos.

compuin 04-02-2020 18:54:58

Cita:

Empezado por escafandra (Mensaje 535553)
Pues si la calculadora de mi teléfono no falla, el resultado es 01° 12' 35,5"
No tengo delphi a mano.

Saludos.

Pues no es el resultado esperado

compuin 04-02-2020 19:10:39

Cita:

Empezado por escafandra (Mensaje 535553)
Pues si la calculadora de mi teléfono no falla, el resultado es 01° 12' 35,5"
No tengo delphi a mano.

Saludos.

Y si multiplcas ese resultado por 0.910099 ?

escafandra 04-02-2020 19:20:50

1,209861111111×0,910099=1,101093387361

Saludos

compuin 04-02-2020 19:22:33

Cita:

Empezado por escafandra (Mensaje 535557)
1,209861111111×0,910099=1,101093387361

Saludos

No puede ser, como es posible que la formula no funcione ...

escafandra 04-02-2020 19:24:48

Sí tienes una calculadora hazlo tú mismo. A lo mejor la fórmula no es esa...

Saludos.

compuin 04-02-2020 19:30:52

Te trasnscribo la formula con un ejemplo

Sexto elemento : La Diferencia Ascensional (DA)

Se la define como el tiempo que toma un cuerpo, medido en un plazo de más o menos 6 horas, para recorrer sobre su SA (SemiArco) el espacio que separa el horizonte del MC.

La DA depende de la declinación y de la Latitud geográfica del lugar de nacimiento.

Se calcula de la siguiente forma:

Sen DA = Tag Lat. geográfica x Tag. decli. planeta

Ejemplo: calcular la DA de Neptuno situado a 26.02 de Virgo, son una latitud geográfica de 53.24 y una declinación de 2.41

Sen DA = 1.34650 x 0.04687 = 0.0631104 = 3.37

la DA de Neptuno, es 3.37

escafandra 04-02-2020 20:07:35

Por pasos.
1.- El rigor matemático de esa última expresión deja mucho que desear, no se de donde lo sacaste.
2.- 1,34650 x 0,04687 = 0,063110455 cierto y eso quiere decir lo que dice. 1,34650 x 0,04687 es el producto de dos números reales no de ángulos, sino de las tangentes (siguiendo la fórmula dada)
3.- 0,063110455 según tu fórmula representa el seno de un ángulo. Dicho ángulo es el arcsen( 0,063110455) = 3,618367381189. A falta de una calculadora mejor que la de un teléfono.

Los ejemplos que te dan están mal explicados y de ahí que te fallen las cosas.
Te aconsejo que tomes una calculadora y hagas los cálculos para ver que coinciden y quizás deberías buscar una fuente más rigurosa.

Saludos

compuin 04-02-2020 20:12:15

Cita:

Empezado por escafandra (Mensaje 535561)
Por pasos.
1.- El rigor matemático de esa última expresión deja mucho que desear, no se de donde lo sacaste.
2.- 1,34650 x 0,04687 = 0,063110455 cierto y eso quiere decir lo que dice. 1,34650 x 0,04687 es el producto de dos números reales no de ángulos, sino de las tangentes (siguiendo la fórmula dada)
3.- 0,063110455 según tu fórmula representa el seno de un ángulo. Dicho ángulo es el arcsen( 0,063110455) = 3,618367381189. A falta de una calculadora mejor que la de un teléfono.

Los ejemplos que te dan están mal explicados y de ahí que te fallen las cosas.
Te aconsejo que tomes una calculadora y hagas los cálculos para ver que coinciden y quizás deberías buscar una fuente más rigurosa.

Saludos

Los valores dieron correctos, lo que falla es la formula usada ???

Como quedaria la formula corrrectamente usando las funciones trogonometricas, ya que no es sen sino arcsen o tang ??

escafandra 04-02-2020 20:16:11

Lo que te falla es como interpretas la fórmula y como la usas. No te vendría mal repasar algo de trigonometría.

Saludos

compuin 04-02-2020 20:17:49

Cita:

Empezado por escafandra (Mensaje 535563)
Lo que te falla es como interpretas la fórmula y como la usas. No te vendría mal repasar algo de trigonometría.

Saludos

Ok

:eek::(:(

escafandra 04-02-2020 20:32:12

No confundas un ángulo con su tangente. En el ejemplo último que pones te dan las tangentes. Y otro detalle, Si
Código Delphi [-]
sin(A) = tg (B) x tg (C)
Entonces, y despejando A, tenemos:
Código Delphi [-]
A = arcsin [tg (B) x tg (C)]

Lo que quiere decir que A es el ángulo cuyo seno es...


Saludos.

compuin 04-02-2020 20:36:49

Cita:

Empezado por escafandra (Mensaje 535565)
No confundas un ángulo con su tangente. En el ejemplo último que pones te dan las tangentes. Y otro detalle, Si
Código Delphi [-]
sin(A) = tg (B) x tg (C)
Entonces, y despejando A, tenemos:
Código Delphi [-]
A = arcsin [tg (B) x tg (C)]

Lo que quiere decir que A es el ángulo cuyo seno es...


Saludos.


Haciendolo como me orientas me da este error

Código Delphi [-]
var
  da, lt, decl : Extended;
begin
  lt   := 1.73916666667; // => 01' 44’ 21"
  decl := 21.4341666667; // => 21° 26' 03"
  //da   := RadToDeg(sin(DegToRad(tan(DegToRad(lt))*tan(DegToRad(decl)))));
  DA:=   tan(lt)* tan(decl);

  DA:=   arcsin(da);

  ShowMessage( FloatToStr(da) );   // DA 02º36'10''

  end;


escafandra 04-02-2020 21:55:33

Cita:

Empezado por compuin (Mensaje 535566)
Haciendolo como me orientas me da este error

Código Delphi [-]var da, lt, decl : Extended; begin lt := 1.73916666667; // => 01' 44’ 21" decl := 21.4341666667; // => 21° 26' 03" //da := RadToDeg(sin(DegToRad(tan(DegToRad(lt))*tan(DegToRad(decl))))); DA:= tan(lt)* tan(decl); DA:= arcsin(da); ShowMessage( FloatToStr(da) ); // DA 02º36'10'' end;




Ves, mal interpretado. El seno de un angulo no puede ser mayor de 1 en valor absoluto. Los datos que te han dado son ángulos y no las tangentes. Ten en cuenta las unidades de los ángulos, pues si te los dan en radianes no tendrás que convertir. Las funciones trigonométricas de delphi funcionan en radianes.

el valor obtenido para DA es 0,68299.

Sigo viendo falta de rigor matemático en los ejemplos que tienes. Te paso la función:
Código Delphi [-]
function DiferenciaAscensional(lt, decl: Extended): Extended;
begin
  Result:= RadToDeg(arcsin(tan(DegToRad(lt)) * tan(DegToRad(decl))));
end;


Y para el caso en el que te den ya las tangentes:
Código Delphi [-]
function DiferenciaAscensional2(lt, decl: Extended): Extended;
begin
  Result:= RadToDeg(arcsin(lt * decl));
end;




Saludos.

compuin 04-02-2020 22:00:33

Cita:

Empezado por escafandra (Mensaje 535568)
Ves, mal interpretado. El seno de un angulo no puede ser mayor de 1 en valor absoluto. Los datos dados deben ser ángulos y no las tangentes. Ten en cuenta las unidades de los ángulos, pues si te los dan en radianes no tendrás que convertir. Las funciones trigonométricas de delphi funcionan en radianes.


Sigo viendo falta de rigor matemático en los ejemplos que tienes. Te paso la función:
Código Delphi [-]
function DiferenciaAscensional(lt, decl: Extended): Extended;
begin
  Result:= RadToDeg(arcsin(tan(DegToRad(lt)) * tan(DegToRad(decl))));
end;


Y para el caso en el que te den ya las tangentes:
Código Delphi [-]
function DiferenciaAscensional2(lt, decl: Extended): Extended;
begin
  Result:= RadToDeg(arcsin(lt * decl));
end;




Saludos.

Gracias, para mi todo esto es nuevo

La idea es hacer los calculos a partir de los valores de la Longitud y la latitud. Estos valores vienen ya calculados como valores decimales por una libreria externa. Lo demas de trigonometria y calculo sobre los angulos lo debo hacer yo a mano.

Pude entender lo que me dices con respecto a angulos y tangentes. En realidad los valores deberian manejarse siempre en valores decimales

Entonces la segunda funcion es la que deberia servir para esto, la voy a probar y te comento

escafandra 04-02-2020 22:03:13

Cita:

Empezado por compuin (Mensaje 535569)
Entonces la segunda funcion es la que deberia servir para esto, la voy a probar y te comento


NO. La segunda funcion sólo sirve si lo que te dan son las tangentes ya calculadas, es decir, los parámetros de entrada NO SON ÁNGULOS, son tangentes.


Saludos.

compuin 04-02-2020 22:04:00

Cita:

Empezado por escafandra (Mensaje 535570)
NO. La segunda funcion sólo sirve si lo que te dan son las tangentes ya calculadas, es decir, los parámetros de entrada NO SON ÁNGULOS, son tangentes.


Saludos.

Si, ya me dio error

La primera funcion es la que me sirve

escafandra 04-02-2020 22:08:27

Esa función ya te la había puesto aquí.


Cita:

Empezado por escafandra (Mensaje 535537)
Por partes:
1- Según la formula que pones DA = ARCSIN(TAN LT * TAN DECL) pero eso no lo veo en el código que debería ser algo como:

Código Delphi [-]
var   DA, lt, decl : extended; 
begin   
  lt:=    -2.19474036998329;
  decl:= -24.7975765404927;
  DA:= RadToDeg(arcsin(tan(DegToRad(lt))*tan(DegToRad(decl))));
end;
.....




Saludos.

compuin 04-02-2020 23:02:50

Cita:

Empezado por escafandra (Mensaje 535573)
Esa función ya te la había puesto aquí.







Saludos.

Cuando debo convertirlos a radianes ???

escafandra 04-02-2020 23:07:31

Cita:

Empezado por compuin (Mensaje 535574)
Cuando debo convertirlos a radianes ???

Sin y Tan toman como argumentos el angulo en radianes, por lo tanto con radianes los has de alimentar. Arcsin devuelve el angulo en radianes, luego a grados sexagesimales los has de pasar.


Tal cual como lo puse en la función.





Saludos.

compuin 04-02-2020 23:08:16

Cita:

Empezado por escafandra (Mensaje 535575)
Sin y Tan toman como argumentos el angulo en radianes, por lo tanto con radianes los has de alimentar. Arcsin devuelve el angulo en radianes, luego a grados sexagesimales los has de pasar.


Tal cual como lo puse en la función.





Saludos.

Ok, ya la funcion hace todo el trabajo

LO que me queda es mostrar los resultados en grados

escafandra 04-02-2020 23:10:01

Cita:

Empezado por compuin (Mensaje 535576)
Ok, ya la funcion hace todo el trabajo

LO que me queda es mostrar los resultados en grados


Ese tema ya estaba resuelto en este hilo.


Saludos.

compuin 04-02-2020 23:17:32

Cita:

Empezado por escafandra (Mensaje 535577)
Ese tema ya estaba resuelto en este hilo.


Saludos.

Si, solo lo dije a modo de comentario

Me disculpo por hacerme mal interpretar

escafandra 04-02-2020 23:30:18

Cita:

Empezado por compuin (Mensaje 535578)
Si, solo lo dije a modo de comentario

Me disculpo por hacerme mal interpretar


Tranquilo, a veces somos muy cuadriculados. Pensé que todavía te quedaban dudas y ese hilo sería el vehículo apropiado para plantearlas.




Saludos.

compuin 05-02-2020 19:38:12

Cita:

Empezado por escafandra (Mensaje 535580)
Tranquilo, a veces somos muy cuadriculados. Pensé que todavía te quedaban dudas y ese hilo sería el vehículo apropiado para plantearlas.




Saludos.

Hola,

Que funcion de Delphi convierte 03º03'31'' a decimales ??


La franja horaria es GMT +2. Ahora son las 03:03:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi