Ver Mensaje Individual
  #34  
Antiguo 28-01-2020
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para las operaciones con ángulos dados en cadenas en formato grados, minutos, segundos, lo que habría que hacer es la conversión de la cadena a grados en formato centesimal. Operar y convertir de nuevo a formato cadena.


La conversión a cadena está resuelta. dejo el código para el paso de la cadena a grados centesimales:


Código Delphi [-]
// Extrae la subcadena i de la cadena Str
// i=1  grados
// i=2 minutos
// i=3 segundos

function StrDigit(Str: String; i: integer): String;
var
  n, m: integer;
begin
  n:= 1; m:= 1;
  while i>0 do
  begin
    n:= m;
    while not (Str[m] in ['0'..'9', '.', ',']) do inc(m);
    while (Str[m] in ['0'..'9', '.', ',']) do inc(m);
    dec(i);
  end;
  while not (Str[n] in ['0'..'9', '.', ',']) do inc(n);
  Result:= Copy(Str, n, m-n);
end;

function StrToAngle(Str: String): Extended;
var
  d, m: integer;
  s: Extended;
begin
  d:= StrToIntDef(StrDigit(Str, 1), 0);
  m:= StrToIntDef(StrDigit(Str, 2), 0);
  s:= StrToFloatDef(StrDigit(Str, 3), 0);
  Result:= d + m/60 + s/3600;
end;


Lo siguiente es operar y pasar a cadena en formato grados, minuto, segundos.
Otra cuestión es si queremos pasar los grados al primer cuadrante, si sirven valores negativos, etc...





Saludos.
Responder Con Cita