Die Beschränkung auf Integer erscheint mir nicht sehr weise, da z.B. bei einem Kreis mit "ungeradem" Durchmesser der Mittelpunkt und der Radius eben nicht als Integer ausgedrückt werden können. Auch ist der Geschwindigkeitsnachteil von Gleitkommaoperationen bei zeitgemäßen Prozessoren durchaus zu vernachlässigen. Interessanterweise ist gerade in diesem Fall die Verwendung von Extended statt Integer etwas schneller:
Der Code
result := Sign(Sqr(radius) - Sqr(a.x-b.x) - Sqr(a.y-b.y));
läuft auf meinem System ca. 10% schneller als die Integer-Variante
result := Sign(SquareInt(radius) - SquareInt(a.x-b.x) - SquareInt(a.y-b.y));
während die leicht optimierte Version
Delphi-Quellcode:
var
x, y: Integer;
begin
x := (a.x-b.x);
y := (a.y-b.y);
result := Sign(radius*radius - x*x - y*y);
end;
nur knapp 5% schneller ist als die Extended-Version.