Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1678 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Calcul d'un orthodromie et recouvrement d'une sphère.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Calcul d'un orthodromie et recouvrement d'une sphère.

n°2204598
Profil sup​primé
Posté le 29-09-2013 à 22:55:19  answer
 

Bonjour,
Je cherche à savoir si une position sur la terre se trouve à une distance <= à une distance D d'un autre point sur la terre.
J'ai donc vu la fonction orthodromique, mais j'ai un problème a priori, je trouve des objet positionné à une distance supérieur à D.
 
Voici ma fonction, c'est avec Ada, mais c'est pas bien compliqué, à part peut-être le sens des multiplication et des division pas 100000.0 qui ne sont pas moins obscure pour moi.
 
D'abord, je convertie des coordonnée GPS en degré minute seconde en degrés décimaux.
 
Pour la longitude :

Code :
  1. function Longitude (X : in Longitude_Coordonate_Type) return Decimal_Longitude_Type is                        
  2.   begin
  3.      
  4.      if X.Degr_Lon < 0.0 then
  5.         return -Decimal_Longitude_Type(abs(X.Degr_Lon) + (abs(X.Minu_Lon) / 60.0) + (abs(X.Seco_Lon) / 3600.0));
  6.      else
  7.            return Decimal_Longitude_Type(abs(X.Degr_Lon) + (abs(X.Minu_Lon) / 60.0) + (abs(X.Seco_Lon) / 3600.0));
  8.      end if;
  9.   end Longitude;


 
Pour la latitude.

Code :
  1. function latitude (Y : in Latitude_Coordonate_Type) return Decimal_Latitude_Type is
  2.   begin
  3.      
  4.      if Y.Degr_Lat < 0.0 then
  5.         return -Decimal_Latitude_Type(abs(Y.Degr_Lat) + (abs(Y.Minu_Lat) / 60.0) + (abs(Y.Seco_Lat) / 3600.0));
  6.      else
  7.         return Decimal_Latitude_Type(abs(Y.Degr_Lat) + (abs(Y.Minu_Lat) / 60.0) + (abs(Y.Seco_Lat) / 3600.0));
  8.      end if;        
  9.   end Latitude;


 
En suite j'applique la fonction d'orthodromie et je compare les distances.

Code :
  1. function Is_in(Target : in Gps_Coordonates_Type; item : in Gps_Coordonates_Type; Distance : in Float) return Boolean is
  2.            
  3.                              
  4.      --  Formule À Appliquer Pour Calculer Une Orthodromie : Cos P = (Sin LA . Sin LB) + (Cos LA . Cos LB . Cos G)      
  5.      LA, LB, G: Float := 0.0;
  6.      P : Float := 0.0;
  7.      --    LA Correspond À La Latitude Du Point A.
  8.      --    LB Correspond À La Latitude Du Point B.
  9.      --    G Correspond À La Différence De Longitude Entre Le Point A Et Le Point B.      
  10.      Cos_Produit : Float := 0.0;
  11.      sin_Produit : Float := 0.0;
  12.      Sum_Produit : Float := 0.0;
  13.   begin  
  14.      
  15.      La := Float'Rounding(Latitude(Target.Latitude) * 100000.0) / 100000.0;
  16.      
  17.      Lb := Float'Rounding(Latitude(Item.Latitude) * 100000.0) / 100000.0;
  18.      
  19.      G  :=  Float'Rounding(Longitude(item.Longitude) * 100000.0) / 100000.0 - Float'Rounding(Longitude(Target.Longitude) * 100000.0) / 100000.0;
  20.      
  21.      Cos_Produit := (Float'Rounding((Cos(La) * Cos(Lb) * Cos(G)) * 100000.0) /100000.0);
  22.      --Text_Io.Put_Line("cos_produit"  & Float'Image(cos_produit));
  23.      sin_Produit := (Float'Rounding((Sin(La) * Sin(Lb))  * 100000.0) /100000.0);      
  24.      --Text_Io.Put_Line("sin_produit"  & Float'Image(sin_produit));
  25.      Sum_Produit := (Cos_Produit + Sin_produit);      
  26.      --Text_Io.Put_Line("sum_produit"  & Float'Image(sum_produit));
  27.      P := Arccos(Sum_Produit);
  28.      
  29.      P := P * 60.0;
  30.      
  31.      if  P - Distance > 0.0 then
  32.         --Text_Io.Put_Line("False" );
  33.         return False;
  34.      else
  35.         Text_Io.Put_Line("TRUE" );
  36.         Text_Io.Put_Line("P = " & Float'Image(P));      
  37.         return True;
  38.      end if;
  39.   end Is_in;


 
Qui renvoie vrai pour beaucoup et suutout n'importe quoi.
 
Si vous pouviez jeter un oeil si vous avez le temps. S'il vous plaît ?
Merci.


Message édité par Profil supprimé le 30-09-2013 à 20:57:06
mood
Publicité
Posté le 29-09-2013 à 22:55:19  profilanswer
 

n°2204600
Profil sup​primé
Posté le 29-09-2013 à 23:25:33  answer
 

Par exemple,  
 
Pour les coordonnée suivante


Wopr coordonates
Long   1.0° 0.0' 0.0", Lat  85.0° 0.0' 0.0"
Target coordonates
Long -118.0° 0.0' 0.0", Lat -90.0° 0.0' 0.0"


 
La distance P est P =  5.80813E+01
 
A mon avis j'ai soit pas compris un truc soit mal fais un autre.

n°2204613
verdoux
And I'm still waiting
Posté le 30-09-2013 à 08:32:37  profilanswer
 
n°2204633
rufo
Pas me confondre avec Lycos!
Posté le 30-09-2013 à 10:23:26  profilanswer
 

http://www.developpez.net/forums/d [...] es-resolu/
http://koti.mbnet.fi/ojalesa/googlepages/circle.htm
http://forum.webrankinfo.com/calcu [...] 74024.html
Ton pb s'apparente à un point qui se trouverait ou pas à l'intérieur d'un cercle connaissant les coordonnées de son centre et son rayon. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2204709
Profil sup​primé
Posté le 30-09-2013 à 16:42:07  answer
 

Pourquoi, l'orthodromie c'est pas bien ?

n°2204720
Totoche17
Posté le 30-09-2013 à 17:00:34  profilanswer
 

Toi t'as jamais utilisé de fonctions trigo de ta vie dans un programme informatique, je me trompes ?

n°2204724
Profil sup​primé
Posté le 30-09-2013 à 17:10:52  answer
 

Presque, c'est la première fois.

n°2204726
Totoche17
Posté le 30-09-2013 à 17:13:00  profilanswer
 

Les paramètres de toutes les fonctions trigo doivent être exprimées en rad.

n°2204731
Profil sup​primé
Posté le 30-09-2013 à 17:23:43  answer
 

L'orthodromie retourne des mile nautique.  :jap:

n°2204749
Profil sup​primé
Posté le 30-09-2013 à 19:51:59  answer
 

En réalité, j'essaie de raccorder deux fonction lié par leurs exploitation.
 
D'un côté je fais du recouvrement de surface dont voici le code, et de l'autre je regarde avec l'orthodromie si une position se trouve dans la distance de recouvrement.
 

Code :
  1. --
  2.      function Solid_List (Side : in Side_Type;
  3.                           Ray : in Float;
  4.                           Distance : in Float) return GPS_Coordonates_Manager.Vector is
  5.  
  6.         Terra : GPS_Coordonates_Manager.Vector;
  7.         Diametre : constant Float := Ray * 2.0;
  8.         Perimetre : constant Float := (Pi * Diametre) / 1.852;
  9.         D : constant Float := (1.0/60.0) * Distance;
  10.  
  11.         Count_Of_Equator : constant Long_Long_integer := Long_Long_integer((Perimetre/Distance));
  12.  
  13.         Y : Decimal_Latitude_Type := -90.0;
  14.         X : Decimal_Longitude_Type := -180.0;
  15.      begin
  16.         Text_Io.Put_Line("D =" & Float'Image(D));
  17.         Text_Io.Put_Line("count_of_equator =" & Long_Long_integer'Image(Count_Of_equator));
  18.         for I in 1..Count_Of_Equator/2 loop
  19.            for J in I..Count_Of_Equator loop
  20.  
  21.               declare
  22.                  Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  23.               begin
  24.                  if Side_Of(GPS) /= Side then
  25.                     Terra := Terra & GPS;
  26.                     Print(Gps);
  27.  
  28.                  end if;
  29.               exception
  30.                  when Constraint_Error =>
  31.                     null;
  32.               end;
  33.                Text_Io.Put_Line("X := " & Float'Image(X));
  34.               exit when X + D > 180.0;
  35.               X := X + D;
  36.  
  37.            end loop;
  38.            Text_Io.Put_Line("Y := " & Float'Image(Y));
  39.  
  40.            X := -180.0;
  41.            exit when Y + D > 90.0;
  42.            Y := Y + D;
  43.  
  44.         end loop;
  45.  
  46.         return Terra;
  47.      end Solid_List;


 
 
Mon problème est qu'avec une même distance je ne trouve pas les même points.


Message édité par Profil supprimé le 30-09-2013 à 19:53:05
mood
Publicité
Posté le 30-09-2013 à 19:51:59  profilanswer
 

n°2204759
Profil sup​primé
Posté le 30-09-2013 à 22:07:12  answer
 

Oups, j'ai dit une bêtise.
 
 
Je donne distance à solid_list et (distance * (1.0/60.0)) à Is_in.

n°2204844
rufo
Pas me confondre avec Lycos!
Posté le 01-10-2013 à 10:51:12  profilanswer
 

Et comme indiquer, faut travailler en radians ;) Or, je vois des 180 et 90 qui me laissent à penser que tu bosses en degrés :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2204851
Profil sup​primé
Posté le 01-10-2013 à 11:18:33  answer
 

Non non, c'est pas le problème.
 
L'orthodromie exactement ça prend des coordonnées GPS. et ça retourne des mile nautique.|


Message édité par Profil supprimé le 01-10-2013 à 11:21:16
n°2204852
Totoche17
Posté le 01-10-2013 à 11:25:06  profilanswer
 

rufo a écrit :

Et comme indiquer, faut travailler en radians ;) Or, je vois des 180 et 90 qui me laissent à penser que tu bosses en degrés :/


 
inutile d'insister  :)

n°2204859
Profil sup​primé
Posté le 01-10-2013 à 11:54:35  answer
 

Surtout que c'est exactement la même chose. des degrés ou radians, c'est que l'unité qui change.
 
Bon après j'ai une explication à l'effet de divergence des proximité, peut-être que mon orthodromie est bonne, mais l'effet sur un plan 2D en tout cas, ça fait bizarre.
Faut voir que sur un plan 2D les bord sont en réalité des proximité.
Puis ça doit être tout défomé.
 
Enfin, ça reste obscure.
 
Alors, si vous savez ce que j'ai fait. Et que vous me comprenez, parce que c'est pas évident. Vous pouvez peut-être me venir en aide.
Je vous en remercie d'avance, merci pour les conseil.

n°2204861
rufo
Pas me confondre avec Lycos!
Posté le 01-10-2013 à 12:11:12  profilanswer
 

Question bête : tu utilises quel système de projection 2D ? Lambert II, WGS84, autre ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2204862
Profil sup​primé
Posté le 01-10-2013 à 12:17:08  answer
 

J'utilise, la représentation jovasile.
 
Voici ma fonction To_Map coordonates qui applique une converstion GPS  dms en coordonnées 2D
 

Code :
  1. function To_Map_Coordonates(GPS_Coordonates : in Gps_Coordonates_Type) return Map_Coordonates_Type is
  2.  
  3.      Map_Coordonates : Map_Coordonates_Type;
  4.   begin
  5.      if Gps_Coordonates.Longitude.Degr_Lon >= 0.0 then
  6.  
  7.         Map_Coordonates.X :=
  8.           Max_X_Coordonate/2.0 +
  9.           ((GPS_Coordonates.Longitude.Degr_Lon) * (3600.0 * Lon_unit)) +
  10.           ((GPS_Coordonates.Longitude.Minu_Lon) * (60.0 * Lon_Unit)) +
  11.           ((GPS_Coordonates.Longitude.Seco_Lon) * Lon_Unit);
  12.      else
  13.  
  14.         Map_Coordonates.X :=
  15.           Max_X_Coordonate/2.0 -
  16.           ((GPS_Coordonates.Longitude.Degr_Lon) * (3600.0 * Lon_unit)  * (-1.0)) -
  17.           ((GPS_Coordonates.Longitude.Minu_Lon) * (60.0 * Lon_Unit)) -
  18.           ((GPS_Coordonates.Longitude.Seco_Lon) * Lon_Unit);
  19.     end if;
  20.  
  21.     if Gps_Coordonates.Latitude.Degr_Lat >= 0.0 then
  22.  
  23.         Map_Coordonates.Y :=
  24.           Max_Y_Coordonate/2.0 -
  25.           (((Gps_Coordonates.Latitude.Degr_Lat) * (3600.0 * Lat_unit)) +
  26.           ((Gps_Coordonates.Latitude.Minu_Lat) * (60.0 * Lat_Unit)) +
  27.           ((Gps_Coordonates.Latitude.Seco_Lat) * Lat_Unit));
  28.      else
  29.         Map_Coordonates.Y :=
  30.           Max_Y_Coordonate/2.0 +
  31.           ((Gps_Coordonates.Latitude.Degr_Lat) * (3600.0 * Lat_unit) * (-1.0)) +
  32.           ((Gps_Coordonates.Latitude.Minu_Lat) * (60.0 * Lat_Unit)) +
  33.           ((Gps_Coordonates.Latitude.Seco_Lat) * Lat_Unit);
  34.  
  35.      end if;
  36.  
  37.  
  38.      return Map_Coordonates;
  39.   end To_Map_Coordonates;


 
 
Je ne lui reproche que son manque d'arithmétique. En effet, j'aimerais bien assumer les négatif pour les minutes et les seconde également.

n°2204863
Profil sup​primé
Posté le 01-10-2013 à 12:24:09  answer
 

Je pourrait mieux faire en représentant en 3D ma map sur un plan 2D.
C'est à dire qu'au delà 90° ou -90° longitudinal, je retourne au centre.

n°2204866
Totoche17
Posté le 01-10-2013 à 12:35:02  profilanswer
 


 
Tout à fait, c'est juste une mesure d'angle  ;)  

n°2205100
Profil sup​primé
Posté le 02-10-2013 à 22:14:48  answer
 

Si non, je cherche à améliorer ma procédure solid_list.
 
Dans l'état actuel, je me trouve avec un horizon de 360 dégrés aux pôles.
 
J'ai entrepris de faire une troisième boucle pour itérer du nord au sud l'index longitudinal, mais je me suis embrouillé plus qu'autre chose.
 
Des idées ?

n°2205118
Profil sup​primé
Posté le 03-10-2013 à 00:42:41  answer
 


 
Bon, j'ai trouvé quoi faire, :
 

Code :
  1. function Solid_List (Side : in Side_Type;
  2.                Ray : in Float;
  3.                Distance : in Float) return GPS_Coordonates_Manager.Vector is
  4.     
  5.      Terra : GPS_Coordonates_Manager.Vector;
  6.      Diametre : constant Float := Ray * 2.0;  
  7.      Perimetre : constant Float := ((Pi * Diametre) / 1.852);
  8.      D : constant Float := (1.0/60.0) * Distance;
  9.     
  10.      Count_Of_Equator : constant Long_Long_integer := Long_Long_integer((Perimetre/Distance));
  11.          
  12.      Y : Decimal_Latitude_Type := -90.0 + D/2.0;
  13.      X : Decimal_Longitude_Type := 0.0+ D/ 2.0;            
  14.      begin
  15.      Text_Io.Put_Line("D =" & Float'Image(D));
  16.      Text_Io.Put_Line("count_of_equator =" & Long_Long_integer'Image(Count_Of_equator));                                
  17.     
  18.      case Side is    
  19.         when Ouest =>
  20.        North_est :
  21.            for I in 1..Count_Of_Equator/2 loop
  22.           for J in 1..I loop
  23.              for K in 1..Count_Of_Equator loop
  24.             for L in  J..K loop                
  25.               
  26.                declare
  27.                   Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  28.                begin                     
  29.                   if Side_Of(GPS) /= Side then
  30.                  Terra := Terra & GPS;
  31.                  Print(Gps);
  32.                 
  33.                   end if;
  34.                exception
  35.                   when Constraint_Error =>
  36.                  null;            
  37.                end;        
  38.                --Text_Io.Put_Line("X := " & Float'Image(X));                   
  39.                exit when X + D > 180.0;
  40.                X := X + D;
  41.               
  42.             end loop;         
  43.             --Text_Io.Put_Line("Y := " & Float'Image(Y));
  44.             
  45.             X := 0.0 + D/2.0;           
  46.             exit North_est when Y + D > 0.0;
  47.             Y := Y + D;                        
  48.              end loop;
  49.           end loop;      
  50.            end loop North_est;
  51.           
  52.            Y := 90.0;
  53.        South_Est :
  54.            for I in 1..Count_Of_Equator/2 loop
  55.           for J in 1..I loop
  56.              for K in 1..Count_Of_Equator loop
  57.             for L in  J..K loop                
  58.               
  59.                declare
  60.                   Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  61.                begin                     
  62.                   if Side_Of(GPS) /= Side then
  63.                  Terra := Terra & GPS;
  64.                  Print(Gps);
  65.                 
  66.                   end if;
  67.                exception
  68.                   when Constraint_Error =>
  69.                  null;            
  70.                end;        
  71.                --Text_Io.Put_Line("X := " & Float'Image(X));                   
  72.                exit when X + D > 180.0;
  73.                X := X + D;
  74.               
  75.             end loop;         
  76.             --Text_Io.Put_Line("Y := " & Float'Image(Y));
  77.             
  78.             X := 0.0 + D/2.0;           
  79.             exit South_est when Y - D < 0.0;
  80.             Y := Y - D;                        
  81.              end loop;
  82.           end loop;      
  83.            end loop South_Est;
  84.           
  85.           
  86.           
  87.           
  88.           
  89.         when Est =>                
  90.            X := -180.0 + D/ 2.0;            
  91.        North_West :
  92.            for I in 1..Count_Of_Equator/2 loop
  93.           for J in 1..I loop
  94.              for K in 1..Count_Of_Equator loop
  95.             for L in  J..K loop                
  96.               
  97.                declare
  98.                   Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  99.                begin                     
  100.                   if Side_Of(GPS) /= Side then
  101.                  Terra := Terra & GPS;
  102.                  Print(Gps);
  103.                 
  104.                   end if;
  105.                exception
  106.                   when Constraint_Error =>
  107.                  null;            
  108.                end;        
  109.                --Text_Io.Put_Line("X := " & Float'Image(X));                   
  110.                exit when X + D > 180.0;
  111.                X := X + D;
  112.               
  113.             end loop;         
  114.             --Text_Io.Put_Line("Y := " & Float'Image(Y));
  115.             
  116.             X := -180.0 + D/2.0;           
  117.             exit North_west when Y + D > 0.0;
  118.             Y := Y + D;                        
  119.              end loop;
  120.           end loop;      
  121.            end loop North_west;          
  122.           
  123.            Y := 90.0;
  124.        South_west:
  125.            for I in 1..Count_Of_Equator/2 loop
  126.           for J in 1..I loop
  127.              for K in 1..Count_Of_Equator loop
  128.             for L in  J..K loop                
  129.               
  130.                declare
  131.                   Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  132.                begin                     
  133.                   if Side_Of(GPS) /= Side then
  134.                  Terra := Terra & GPS;
  135.                  Print(Gps);
  136.                 
  137.                   end if;
  138.                exception
  139.                   when Constraint_Error =>
  140.                  null;            
  141.                end;        
  142.                --Text_Io.Put_Line("X := " & Float'Image(X));                   
  143.                exit when X + D > 180.0;
  144.                X := X + D;
  145.               
  146.             end loop;         
  147.             --Text_Io.Put_Line("Y := " & Float'Image(Y));
  148.             
  149.             X := -180.0 + D/2.0;           
  150.             exit South_west when Y - D < 0.0;
  151.             Y := Y - D;                        
  152.              end loop;
  153.           end loop;      
  154.            end loop South_west;          
  155.  
  156.           
  157.      end case;
  158.           
  159.           
  160.      return Terra;    
  161.   end Solid_List;


 
Ce qui fait 8281 surface de 1° de côté. Les coordonnées obtenue son les centres de ces surface.

n°2205295
Profil sup​primé
Posté le 03-10-2013 à 22:57:08  answer
 

La revoici corrigée.
 

Code :
  1. --
  2.    function Solid_List (Side : in Side_Type;
  3.             Ray : in Float;
  4.             Distance : in Float) return GPS_Coordonates_Manager.Vector is
  5.      
  6.      Terra : GPS_Coordonates_Manager.Vector;
  7.      Diametre : constant Float := Ray * 2.0;  
  8.      Perimetre : constant Float := ((Pi * Diametre) / 1.852);
  9.      D : constant Float := (1.0/60.0) * Distance * 2.0;
  10.      
  11.      Count_Of_Equator : constant Long_Long_integer := Long_Long_integer((Perimetre/Distance));
  12.      
  13.      Y : Decimal_Latitude_Type := -90.0 + D /2.0;
  14.      X : Decimal_Longitude_Type := 0.0+ D / 2.0;            
  15.   begin
  16.      Text_Io.Put_Line("D =" & Float'Image(D));
  17.      Text_Io.Put_Line("count_of_equator =" & Long_Long_integer'Image(Count_Of_equator));                                
  18.      
  19.      case Side is    
  20.      when Ouest =>
  21.     North_est :
  22.         for I in 1..Count_Of_Equator/2 loop
  23.            for J in 1..Count_Of_Equator/2 loop
  24.           for K in 1..I loop
  25.              for L in  1..J*2 loop                
  26.             
  27.             declare
  28.                Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  29.             begin                     
  30.                if Side_Of(GPS) /= Side then
  31.                   Terra := Terra & GPS;
  32.                   Print(Gps);
  33.                   
  34.                end if;
  35.             exception
  36.                when Constraint_Error =>
  37.                   null;            
  38.             end;        
  39.             --Text_Io.Put_Line("X := " & Float'Image(X));                   
  40.             exit North_Est when X + D > 180.0;
  41.             X := X + D;
  42.             
  43.              end loop;         
  44.  
  45.              --Text_Io.Put_Line("Y := " & Float'Image(Y));
  46.              X := 0.0 + D/2.0;           
  47.              exit when Y + D > 0.0;
  48.              Y := Y + D;                        
  49.  
  50.             
  51.           end loop;
  52.            end loop;      
  53.         end loop North_est;
  54.         X := 0.0 + D/2.0;           
  55.         Y := 90.0 - D/2.0;
  56.     South_Est :
  57.         for I in 1..Count_Of_Equator/2 loop
  58.            for J in 1..Count_Of_Equator/2 loop
  59.           for K in 1..I loop
  60.              for L in  1..J*2 loop                
  61.             
  62.             declare
  63.                Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  64.             begin                     
  65.                if Side_Of(GPS) /= Side then
  66.                   Terra := Terra & GPS;
  67.                   Print(Gps);
  68.                   
  69.                end if;
  70.             exception
  71.                when Constraint_Error =>
  72.                   null;            
  73.             end;        
  74.             --Text_Io.Put_Line("X := " & Float'Image(X));                   
  75.             exit South_Est when X + D > 180.0;
  76.             X := X + D;
  77.             
  78.              end loop;         
  79.              --Text_Io.Put_Line("Y := " & Float'Image(Y));
  80.           X := 0.0 + D/2.0;           
  81.           exit when Y - D < 0.0;
  82.           Y := Y - D;                        
  83.           
  84.  
  85.             
  86.           end loop;
  87.                     
  88.            end loop;      
  89.         end loop South_Est;
  90.         
  91.         
  92.         
  93.         
  94.         
  95.      when Est =>                
  96.         X := 0.0 - D/ 2.0;            
  97.     North_West :
  98.         for I in 1..Count_Of_Equator/2 loop
  99.            for J in 1..Count_Of_Equator/2 loop
  100.           for K in 1..I loop
  101.              for L in  1..J*2 loop                
  102.             
  103.             declare
  104.                Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  105.             begin                     
  106.                if Side_Of(GPS) /= Side then
  107.                   Terra := Terra & GPS;
  108.                   Print(Gps);
  109.                   
  110.                end if;
  111.             exception
  112.                when Constraint_Error =>
  113.                   null;            
  114.             end;        
  115.             --Text_Io.Put_Line("X := " & Float'Image(X));                   
  116.             exit when X - D < -180.0;
  117.             X := X - D;
  118.             
  119.              end loop;         
  120.             
  121.              --Text_Io.Put_Line("Y := " & Float'Image(Y));
  122.             
  123.              X := 0.0 - D/2.0;           
  124.              exit North_west when Y + D > 0.0;
  125.              Y := Y + D;        
  126.             
  127.           end loop;
  128.           
  129.            end loop;      
  130.         end loop North_west;          
  131.         X := -0.0 + D/ 2.0;            
  132.         Y := 90.0 - D/2.0;
  133.     South_west:
  134.         for I in 1..Count_Of_Equator/2 loop
  135.            for J in 1..Count_Of_Equator/2 loop
  136.           for K in 1..I loop
  137.              for L in  1..J*2 loop                
  138.             
  139.             
  140.             declare
  141.                Gps : constant Gps_Coordonates_Type := To_Gps(X, Y);
  142.             begin                     
  143.                if Side_Of(GPS) /= Side then
  144.                   Terra := Terra & GPS;
  145.                   Print(Gps);
  146.                   
  147.                end if;
  148.             exception
  149.                when Constraint_Error =>
  150.                   null;            
  151.             end;        
  152.             --Text_Io.Put_Line("X := " & Float'Image(X));                   
  153.             exit South_West when X - D < -180.0;
  154.             X := X - D;
  155.             
  156.              end loop;         
  157.              --Text_Io.Put_Line("Y := " & Float'Image(Y));
  158.              X := 0.0 - D/2.0;           
  159.              exit when Y - D < 0.0;
  160.              Y := Y - D;                        
  161.  
  162.           end loop;
  163.  
  164.            end loop;      
  165.         end loop South_west;          
  166.  
  167.         
  168.      end case;
  169.      
  170.      
  171.      return Terra;    
  172.   end Solid_List;

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Calcul d'un orthodromie et recouvrement d'une sphère.

 

Sujets relatifs
Calcul de d'une orthodromie avec Adaecrire un programme (pascal) qui calcule X puissance n ?!!!
[opencv] calcule du jacobienfonction strlen calcule de la longueur de chaine
aidez moi : que calcule cette procédurecalcule de la longeur de la variable
[Access 2003] champs calculé à partir de 2 tables différentes[SQL server] Recherche sur champ calculé
Calcule en base 13??Classement suivant un total calculé
Plus de sujets relatifs à : Calcul d'un orthodromie et recouvrement d'une sphère.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR