Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2004
Avatar de Picard
Picard Picard is offline
Miembro
 
Registrado: may 2004
Ubicación: Palamos
Posts: 23
Poder: 0
Picard Va por buen camino
Convertir decimales a radianes

Sabeis de algun metodo para convertir decimales a radianes? en los ejemplos de easymap vcl me lo hace asi, pero esta en pascal y no tengo ni idea de como hacerlo en c++ builder,
Código:
  
procedure TfrmMain.MapMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 DisplayPosition(X,Y);
end;

procedure TfrmMain.DisplayPosition(X, Y: Integer);
var
 mX, mY: Extended;
 degX, minX, secX, degY, minY, secY: Integer;
 signX, signY, sX, sY: String;
begin
 if Map.Layers.Count = 0 then Exit;
 Map.ScreenToMap(X, Y, mX, mY);
 if actPositionInDegree.Checked then
  begin
   if mx < 0 then signX := '-' else signX := '';//'+';
   mX := abs(mX);
   degX := trunc(int(mX));
   minX := trunc(int((mX-degX)* 60));
   secX := trunc(int((mX-degX-minX/60)*3600));
   sX := Format('%S%-.3D-%.2D''%.2D"', [signX, degX, minX, secX]);

   if mY < 0 then signY := '-' else signY := '';//'+';
   mY := abs(mY);
   degY := trunc(int(mY));
   minY := trunc(int((mY-degY)* 60));
   secY := trunc(int((mY-degY-minY/60)*3600));
   sY := Format('%S%-.3D-%.2D''%.2D"', [signY, degY, minY, secY]);
  end
 else
  begin
   sX := Format('%F', [mX]);
   sY := Format('%F', [mY]);
  end;
 StatusBar.Panels[1].Text := Format('X=%S Y=%S', [sX, sY]);
end;
gracias
Responder Con Cita
  #2  
Antiguo 02-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Es simplemente una regla de 3.

Ahora, no se que son "decimales" exactamente... pues hay grados sexagecimales y centecimales que creo que son a los que te referis (y por cierto, no tienen nada que ver con el código publicado).

(pi) radianes = 400 grados centecimales = 360 grados sexagecimales.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 02-06-2004
Avatar de Picard
Picard Picard is offline
Miembro
 
Registrado: may 2004
Ubicación: Palamos
Posts: 23
Poder: 0
Picard Va por buen camino
he de convertir 41.310113 a grados,minutos y segundos, son datos de latitud y longitud,lo que no entiendo es que me digas que no tiene nada que ver con el codigo que he puesto en pascal ya que es el codigo de ejemplo que me aparece en las ayudas de easymap vcl,el plugin con el que visualizo ma`pas desde mi aplicacion.

gracias
Responder Con Cita
  #4  
Antiguo 02-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Bueno... en realidad no tiene nada que ver con el título del mensaje, pues no aparecen los radianes por ningun lado....

Ahora veo que lo que está mal, es precisamente el título, pues lo que queres es mostrar un angulo en formato de grados/minutos/segundos, es asi??

Código:
  pseudocodigo:
  grados = parteentera(angulo);
  resto = partedecimal(angulo) * 60
  minutos = parteentera(resto)
  resto = partedecimal(resto) * 60
  segundos = parteentera(resto)
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 02-06-2004
Avatar de Picard
Picard Picard is offline
Miembro
 
Registrado: may 2004
Ubicación: Palamos
Posts: 23
Poder: 0
Picard Va por buen camino
Creo que si, en realidad ya estoy mas perdido que un pulpo en un garage,veras te explico de que va.

utilizo un componente para visualizar mapas,en realidad, es un componente gis para c++ builder y delphi.pero como lleva cartografia mundial incorporada y georeferenciada en formato .mif,ya me vale, al menos es mas barato (70€) que comprar las sdk,s de c-map (7500 $ USA).Asi paso los valores de las coordenadas del mapa a dos TLabel .
Código:
 
void __fastcall TfrmPrincipal::EasyMap1MouseMove(TObject *Sender,
	  TShiftState Shift, int X, int Y)
{
	   long double fX,fY;
	   AnsiString buf;
	   EasyMap1->ScreenToMap(X,Y,fX,fY);
	   lblLatMouse->Caption = buf.sprintf("%2Lf",fY);
	   lblLongMouse->Caption = buf.sprintf("%2Lf",fX);
	   Application->ProcessMessages();
}
Pero claro como nada es perfecto me da esos valores asi: 41.235110 y 3.152003.
con el codigo que puse en el primer hilo deberia pasar estos datos a grados,minutos y segundos pero esta en pascal y poco que domino c++ imaginate la de problemas que tengo para adaptar un codigo pascal a c++.he probado infinidad de cosas,pero el resultado no cambia en nada.
espero haberme explicado correctamente.
Gracias
Responder Con Cita
  #6  
Antiguo 02-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si me permiten dar mi opinión:

Yo creo que te estás liando al tratar de adaptar directamente el código que escribes. Lo que jachguate te puso fue un pseudocódigo y la ventaja de esto es que no está ligado a ningún lenguaje en particular de manera que ya sólo tienes que consultar la documentación de C++ para ver qué funciones ahí hacen el papel de parteentera() y partedecimal().

// Saludos
Responder Con Cita
  #7  
Antiguo 05-06-2004
Avatar de Picard
Picard Picard is offline
Miembro
 
Registrado: may 2004
Ubicación: Palamos
Posts: 23
Poder: 0
Picard Va por buen camino
Lo solucione asi:
String DecASexa(long double dec)
{
short grados = dec;
long double temp = std::fabsl(dec - grados);
unsigned short minutos = (temp *= 60);
unsigned short segundos = (temp-minutos) * 60;
return Format("%d\xB0 %d' %d\"", ARRAYOFCONST((grados, minutos, segundos)));
}

void __fastcall TfrmPrincipal::EasyMap1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
//long double fX,fY;
long double Latitud1;
long double Longitud1;

EasyMap1->ScreenToMap(X,Y,Latitud1,Longitud1);
lblLatMouse->Caption = (DecASexa(Latitud1));
lblLongMouse->Caption = (DecASexa(Longitud1));
Application->ProcessMessages();
}
//---------------------------------------------------------------------------
Ahora necesito,por ej : 41º26'34" = 41º26'34"N ó -41º26'34" = 41º26'34"S
Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:23:33.


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