• 0
Sign in to follow this  
acss

(Resolvido) Operações com medidas de ângulos expressos em angulos, minutos e segundos

Question

Boa noite tem como fazer operações com medidas de ângulos expressos em angulos, minutos e segundos?

 

Obrigado

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0
  • 0

Jhonas valeu mesmo

Só mais uma pergunta é possível implementar o  código abaixo no delphi usando  TEdit com mácara para graus minutos e segundos para a pessoa entrar manualmente com a latitude e longitude e o resultado ser mostrado em 2 label ?

Vai ser para um programa de astrologia

Obrigado

---------------------------

Esse foi o link que você me passou

http://www.cleibsonalmeida.blog.br/site/python-transformacao-de-coordenadas/

Segue um pequeno trecho de código python que exemplifica como fazer esse tipo de cálculo
(usando a biblioteca re -> regex).

 

latitude = '23º34"45"S'
longitude = '105º34'12"E'
import re
        if len(latitude) == 10:
            lat_polaridade = -1 if latitude[-1:] == 'S' else 1
            lat_temp = re.findall('\d{2,3}', latitude)
            grau_lat = int(lat_temp[0])
            min_lat = int(lat_temp[1])/60
            seg_lat = int(lat_temp[2])/3600
            lat_final = round(grau_lat + min_lat + seg_lat, 10) * lat_polaridade
            latitude = str(lat_final)
        if len(longitude) == 10 or len(longitude) == 11:
            lon_polaridade = -1 if longitude[-1:] == 'W' else 1
            lon_temp = re.findall('\d{2,3}', longitude)
            grau_lon = int(lon_temp[0])
            min_lon = int(lon_temp[1])/60
            seg_lon = int(lon_temp[2])/3600
            lon_final = round(grau_lon + min_lon + seg_lon, 10) * lon_polaridade
            longitude = str(lon_final)

----------------------------------------------------------

Os resultados serão:
latitude = '-23.5791666667'
longitude = '105.57'

Share this post


Link to post
Share on other sites
  • 0

é possível implementar o  código abaixo no delphi usando  TEdit com mácara para graus minutos e segundos para a pessoa entrar manualmente com a latitude e longitude e o resultado ser mostrado em 2 label ?

sim...  se voce conhece o delphi, basta converter os comandos do python para delphi

http://www.atug.com/andypatterns/pythonDelphiTalk.htm

ou pode ver exemplos em delphi

https://www.google.com.br/search?ei=EfqiWu2fD8SnwATiw5KICQ&q=latitude+e+longitude+no+delphi&o que=latitude+e+longitude+delphi&gs_l=psy-ab.1.0.0i22i30k1.1503.4055.0.5931.7.7.0.0.0.0.131.815.0j7.7.0....0...1.1.64.psy-ab..0.7.810...0j0i67k1.0.U6IgUyrRsTE

usando  MaskEdit com mácara para graus minutos e segundos

na propriedade EditMask voce pode colocar essa mascara

!90º 00' 00">LL;1;_

abraço

Share this post


Link to post
Share on other sites
  • 0

Jhonas como vai

Obrigado pelos links que você tem me passado, ainda sou principiante em progamação aqui no lazarus e agradeço pela sua ajuda.

Você conheçe algum código para lázarus ou delphi que eu possa usar aqui que faça a soma de angulos expressos em angulos, graus e minutos

Usando dois MaskEdit e dando o resultado num label depois de clicado num Button?

 179°  59'  60"    MaskEdit1
+ 70°    5'   15"     MaskEdit2  
----------------
109°  54'   45"  Label

 

Abraço


Aqui no lazarus funcionou está máscara para 3 digitos   !990º 00' 00">;1;_  está correto?

 

5aa443a536733_Semttulo2.jpg.d6114341088a1facd2c308db7e781c69.jpg

Edited by acss
Esqueçi de colocar o resultado da soma

Share this post


Link to post
Share on other sites
  • 0

se voce esta somando esta errado...  veja a explicação:

Somando:

Subtraindo:

Dividindo:

abraço

Share this post


Link to post
Share on other sites
  • 0

Obrigado Jhonas  me enganei e peguei  a subtração em vez da adição aqui no livro para  exemplo da dúvida

 

 

Share this post


Link to post
Share on other sites
  • 0

Tudo bem Jhonas bom dia

Consegui esse código aqui, mas  não está funcionando no Lázarus ,  então já vou deixar o código completo aqui caso alguém precise


ele trava nesta linha de instrução na hora da depuração (em cima do símbolo do grau '°' )

 'º': Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1)));

 

E esta é a mensagem de erro mostrado no depurador do Lázarus

unit1.pas(42,14)  Error: Constant and CASE types do not match


 

Agradecido se puder  me auxiliar
         

 

procedure TForm1.Button1Click(Sender: TObject);

//Segue solução em Delphi, destaco que Edit1 e Edit2 esperam uma string válida, com o formato: ggº mm' ss"


   function GetValorNumerico(const P_Texto: string; const P_Caracter: Char): Integer;
   begin
      case P_Caracter of
     'º': Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1))); 

      '''': Result := StrToInt(Trim(Copy(P_Texto, Pos('º', P_Texto)+2, 2)));
         '"': Result := StrToInt(Trim(Copy(P_Texto, Pos('''', P_Texto)+2, 2)));
      end;
   end;

var
   W_Graus1: integer;
   W_Minutos1: integer;
   W_Segundos1: integer;

   W_Graus2: integer;
   W_Minutos2: integer;
   W_Segundos2: integer;

   W_Graus3: integer;
   W_Minutos3: integer;
   W_Segundos3: integer;
begin
   W_Graus1 := GetValorNumerico(Edit1.Text, 'º');
   W_Minutos1 := GetValorNumerico(Edit1.Text, '''');
   W_Segundos1 := GetValorNumerico(Edit1.Text, '"');

   W_Graus2 := GetValorNumerico(Edit2.Text, 'º');
   W_Minutos2 := GetValorNumerico(Edit2.Text, '''');
   W_Segundos2 := GetValorNumerico(Edit2.Text, '"');

   if W_Segundos1 < W_Segundos2 then
   begin
      Dec(W_Minutos1);
      Inc(W_Segundos1, 60);
   end;

   W_Segundos3 := W_Segundos1 - W_Segundos2;

   if W_Minutos1 < W_Minutos2 then
   begin
      Dec(W_Graus1);
      Inc(W_Minutos1, 60);
   end;

   W_Minutos3 := W_Minutos1 - W_Minutos2;

   W_Graus3 := W_Graus1 - W_Graus2;

   Label1.Caption := Format('%dº %d'' %d"', [W_Graus3, W_Minutos3, W_Segundos3]);
end;                           

Share this post


Link to post
Share on other sites
  • 0

If  P_Caracter =  'º' then Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1))); 

 If  P_Caracter =  '''' then Result := StrToInt(Trim(Copy(P_Texto, Pos('º', P_Texto)+2, 2)));

if  P_Caracter =  '"' then Result := StrToInt(Trim(Copy(P_Texto, Pos('''', P_Texto)+2, 2)));
      end;

 

ou veja nesses links

https://www.google.com.br/search?ei=O_juWp_EKMGowATgpaKYAQ&q=case+com+char+delphi&o que=case+com+char+delphi&gs_l=psy-ab.1.0.0i30k1.15554.16067.0.17742.4.4.0.0.0.0.128.475.0j4.4.0....0...1c.1.64.psy-ab..0.4.471...0i7i30k1.0.E9EIojoi9Hk

 

abraço

Share this post


Link to post
Share on other sites
  • 0

Jhonas  muito obrigado vou estou os links o google, sou ainda principiante estava tentando colocar as linhas que você passou mas não estou acertando aqui no caso estas instruções  vão para qual parte do código principal

 If  P_Caracter =  'º' then Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1)));

 If  P_Caracter =  '''' then Result := StrToInt(Trim(Copy(P_Texto, Pos('º', P_Texto)+2, 2)));

if  P_Caracter =  '"' then Result := StrToInt(Trim(Copy(P_Texto, Pos('''', P_Texto)+2, 2)));
      end;

 

correção: Jhonas muito obrigado vou estudar os links do google que você me passou

correção: Jhonas muito obrigado vou estudar os links do google que você me passou

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this