Calculer la distance entre deux couples (deux points) est souvent utile pour trouver le meilleure chemin sur une carte. La formule pour trouver la distance entre deux points s'inspire de la formule de Pythagore (c2=√a2+b2) et de ses théories sur les triangles. Vous trouverez la réponse que vous souhaitez, à l'aide du code source Pascal suivant:
- Program CoordToDelta;
-
- Function Sqrt(X:Real):Real;
- Var
- A,B,M,XN:Real;
- Begin
- If X=0.0Then Begin
- Sqrt:=0.0;
- End
- Else
- Begin
- M:=1.0;
- XN:=X;
- While XN>=2.0 do Begin
- XN:=0.25*XN;
- M:=2.0*M;
- End;
- While XN<0.5 do Begin
- XN:=4.0*XN;
- M:=0.5*M;
- End;
- A:=XN;
- B:=1.0-XN;
- Repeat
- A:=A*(1.0+0.5*B);
- B:=0.25*(3.0+B)*B*B;
- Until B<1.0E-15;
- Sqrt:=A*M;
- End;
- End;
-
- Function Arctan(X:Real):Real;
- Var
- A,B:Real;
- N:Integer;
- Begin
- A := 1.0 / Sqrt(1.0 + (X * X));
- B := 1.0;
- For N:=1 to 11 do Begin
- A := (A + B) / 2.0;
- B := Sqrt(A * B);
- End;
- Arctan:=X/(Sqrt(1.0+(X*X))*A);
- End;
-
- Function Cos(X:Real):Real;
- Var
- R,S:Real;
- I:Byte;
- Begin
- R:=X*X;
- S:=42.0;
- For I:=10 downto 1 do S:=4.0*I-2.0+(-R)/S;
- S:=S*S;
- Cos:=(S-R)/(S+R);
- End;
-
- Function Sin(X:Real):Real;
- Var
- R,S:Real;
- I:Byte;
- Begin
- R:=X*X;
- S:=42.0;
- For I:=10 downto 1 do S:=4.0*I-2.0+(-R)/S;
- Sin:=2.0*X*S/(R+S*S);
- End;
-
- Function ArcCos(a:Real):Real;Begin
- If Abs(a)=1.0Then ArcCos:=(1-a)*PI/2.0
- Else ArcCos:=Arctan(-a/Sqrt(1-a*a))+2*Arctan(1);
- End;
-
- Function CoordToDeltaKm(
- Q1Latitude,Q1LatiDeg:Real;Q1LatiDirection:Char;
- Q1Longitude,Q1LongDeg:Real;Q1LongDirection:Char;
- Q2Latitude,Q2LatiDeg:Real;Q2LatiDirection:Char;
- Q2Longitude,Q2LongDeg:Real;Q2LongDirection:Char
- ):Real;
- Var
- a1,b1,a2,b2,RawDelta:Real;
- Begin
- a1:=(Q1Latitude+(Q1LatiDeg/60))*PI/180;
- If Q1LatiDirection='N'Then a1:=-a1;
- b1:=(Q1Longitude+(Q1LongDeg/60))*PI/180;
- If Q1LongDirection='O'Then b1:=-b1;
- a2:=(Q2Latitude+(Q2LatiDeg/60))*PI/180;
- If Q2LatiDirection='N'Then a2:=-a2;
- b2:=(Q2Longitude+(Q2LongDeg/60))*PI/180;
- If Q2LongDirection='O'Then b2:=-b2;
- RawDelta:=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2));
- CoordToDeltaKm:=RawDelta*6378.0;
- End;
-
- Function CoordToDeltaStatuteMiles(
- Q1Latitude,Q1LatiDeg:Real;Q1LatiDirection:Char;
- Q1Longitude,Q1LongDeg:Real;Q1LongDirection:Char;
- Q2Latitude,Q2LatiDeg:Real;Q2LatiDirection:Char;
- Q2Longitude,Q2LongDeg:Real;Q2LongDirection:Char
- ):Real;
- Var
- a1,b1,a2,b2,RawDelta:Real;
- Begin
- a1:=(Q1Latitude+(Q1LatiDeg/60))*PI/180;
- If Q1LatiDirection='N'Then a1:=-a1;
- b1:=(Q1Longitude+(Q1LongDeg/60))*PI/180;
- If Q1LongDirection='O'Then b1:=-b1;
- a2:=(Q2Latitude+(Q2LatiDeg/60))*PI/180;
- If Q2LatiDirection='N'Then a2:=-a2;
- b2:=(Q2Longitude+(Q2LongDeg/60))*PI/180;
- If Q2LongDirection='O'Then b2:=-b2;
- RawDelta:=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2));
- CoordToDeltaStatuteMiles:=RawDelta*3963.1;
- End;
-
-
- Function CoordToDeltaNauticalMiles(
- Q1Latitude,Q1LatiDeg:Real;Q1LatiDirection:Char;
- Q1Longitude,Q1LongDeg:Real;Q1LongDirection:Char;
- Q2Latitude,Q2LatiDeg:Real;Q2LatiDirection:Char;
- Q2Longitude,Q2LongDeg:Real;Q2LongDirection:Char
- ):Real;
- Var
- a1,b1,a2,b2,RawDelta:Real;
- Begin
- a1:=(Q1Latitude+(Q1LatiDeg/60))*PI/180;
- If Q1LatiDirection='N'Then a1:=-a1;
- b1:=(Q1Longitude+(Q1LongDeg/60))*PI/180;
- If Q1LongDirection='O'Then b1:=-b1;
- a2:=(Q2Latitude+(Q2LatiDeg/60))*PI/180;
- If Q2LatiDirection='N'Then a2:=-a2;
- b2:=(Q2Longitude+(Q2LongDeg/60))*PI/180;
- If Q2LongDirection='O'Then b2:=-b2;
- RawDelta:=ArcCos(Cos(a1)*Cos(b1)*Cos(a2)*Cos(b2) + Cos(a1)*Sin(b1)*Cos(a2)*Sin(b2) + Sin(a1)*Sin(a2));
- CoordToDeltaNauticalMiles:=RawDelta * 3443.9;
- End;
-
- BEGIN
- WriteLn('Distance entre Montréal et Paris en Km: ',
- CoordToDeltaKm(45, 31,'N',73, 34,'O',48, 50,'N', 2, 20,'E'):4:8);
- WriteLn('Distance entre Montréal et Paris en Miles: ',
- CoordToDeltaStatuteMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'):4:8);
- WriteLn('Distance entre Montréal et Paris en Miles Nautique: ',
- CoordToDeltaNauticalMiles(45, 31,'N', 73, 34,'O', 48, 50,'N', 2, 20,'E'):4:8);
- END.
on obtiendra le résultat suivant:
Calcul la distance entre deux points (0,0)-(10,10): 14.142135623731Calcul la distance entre deux points (2,2)-(10,10): 11.3137084989848
Calcul la distance entre deux points (1,1)-(8,8): 9.89950
Dernière mise à jour : Mardi, le 25 octobre 2016