1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
// distance de deux points
Function Distance(x1, y1, x2, y2 : integer): integer;
// Calcul de l'hypothénuse a := sqrt(dx*dx+dy*dy)
// en utilisant la formule de Newton pour le calcul de la racine carrée
// 12 itérations suffisent : sqrt(a) --> Xo = (1+a)/2 et Xn+1 = (xn+a/xn)/2
// C'est 3 fois plus rapide que j := trunc(sqrt(sqr(dx)+sqr(dy)))
var
i : Integer;
a, r0, r1 : Integer;
begin
r0 := x2-x1;
r1 := y2-y1;
a := r0*r0 + r1*r1;
r1 := (1+a) DIV 2;
FOR i := 1 TO 12 DO
begin
r0 := r1;
IF r0 > 0 then r1 := (r0+(a div r0)) div 2;
end;
Result:= r1;
end; |
Partager