"sx2008"
Zitat:
Aus Geschwindigkeitsgründen wird auf Wurzelziehen und Gleitkommaberechnungen verzichtet.
Der Ko-Prozessor rechnet mit Gleitkommazahlen vom Typ extended allemal schneller als die CPU mit Integerwerten.
Was soll radius: integer? Die Komponenten von TPoint sind offensichtlich, wegen SquareInt(a.x-b.x), auch nur Integerwerte,?
Diese Einschränkungen gehen viel zu weit!
Delphi-Quellcode:
typ
TPoint= record x, y: extended end;
cons
eps= 1e-14;
function PointInCircle(m, p:TPoint; radius: extended):integer;
var
a: extended; // Abstend m - p
begin
a:= (m.x - p.x)*(m.x - p.x) + (m.y - p.y)*(m.y - p.y);
if Abs(a)>eps then a:= sqrt(a) else a:= 0; // a könnte durch Rundungsfehler<0 sein
if (a - radius)<-eps then Result:= 1 // Punkt innerhalb Kreis
else if (a - radius)>eps then Result:= -1 // Punkt ausserhalb Kreis
else Result:= 0 // Punkt liegt auf Kreislinie
end;
Noch ein Hinweis: Verwende immer den Typ extended! single und double werden vor und nach jeder Verwendung durch den Koprozessor in/aus extended Typgewandelt.