Thema: Delphi Punkt innerhalb Kreis?

Einzelnen Beitrag anzeigen

Dipl Phys Ernst Winter

Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
 
Delphi 3 Professional
 
#10

Re: Punkt innerhalb Kreis?

  Alt 5. Mai 2009, 18:56
"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.
Autor: DP Ernst Winter
  Mit Zitat antworten Zitat