Folgende Funktion berechnet, ob ein Punkt innerhalb eines Kreise mit einem bestimmten Radius liegt.
Dabei wird der bekannte
Satz des Pythagoras verwendet.
Aus Geschwindigkeitsgründen wird auf Wurzelziehen und Gleitkommaberechnungen verzichtet.
Die
Unit math muss mit uses eingebunden werden.
Delphi-Quellcode:
// a: Kreismittelpunkt
// b: Testpunkt
// Result =>
// 1 = Punkt innerhalb Kreis
// 0 = Punkt liegt auf Kreislinie
// -1 = Punkt ausserhalb Kreis
function PointInCircle(a,b:TPoint; radius:integer):integer;
function SquareInt(x:integer):integer; // Hilfsfunktion: Quadrieren
begin
result := x * x;
end;
begin
result := Sign(SquareInt(radius) - SquareInt(a.x-b.x) - SquareInt(a.y-b.y));
end;
Falls Kreismittelpunkt und/oder der Testpunkt nur in x- und y-Werten vorliegen, kann man die Funktion Point() verwenden:
if PointInCircle(Point(shape.Left, shape.Top), Point(x,y), 50) >= 0 then ...