// Die foldende
Routine prüft, ob sich ein Punkt innerhalb // Getestet mit D4 unter WinME var
x1, x2, y1, y2, a, b, mx, my: Integer;
procedure preparation; // immer bei Ellipsen-Änderung
procedure switch(var v1, v2: Integer);
var
hlp: Integer;
begin
hlp := v1;
v1 := v2;
v2 := hlp;
end;
begin
if x1 > x2 then
switch(x1, x2);
a := round((x2 - x1) / 2);
b := round((y2 - y1) / 2);
mx := x1 + a;
my := y1 + b;
end;
procedure how(I: Integer);
// 4 Ellipsen mit unterschiedlichem Startpunkt
begin
case I of
0:
begin
x1 := 10;
y1 := 10;
x2 := 100;
y2 := 200;
end;
1:
begin
x1 := 100;
y1 := 10;
x2 := 10;
y2 := 200;
end;
2:
begin
x1 := 100;
y1 := 200;
x2 := 10;
y2 := 10;
end;
else
begin
x1 := 10;
y1 := 200;
x2 := 100;
y2 := 10;
end;
end;
end;
function inside(pk: TPoint): boolean; // Test ob drin
var
X, Y: Integer;
Z: Double;
begin
X := pk.X - mx;
Y := pk.Y - my;
if (a = 0.0) or (b = 0.0) then
result := false
else
begin
Z := abs(sqrt(abs((1 - sqr(X) / sqr(a)) * sqr(b))));
result := (Y >= -Z) and (Y <= Z) and (X >= -a) and (X <= a);
end;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if inside(point(X, Y)) then
Label1.caption := 'inside'
else
Label1.caption := 'outside';
end;
// Aufrufe mit 4 verschieden gezeichneten Ellipsen
procedure TForm1.Button1Click(Sender: TObject);
begin
how(0);
preparation;
canvas.ellipse(x1, y1, x2, y2);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
how(1);
preparation;
canvas.ellipse(x1, y1, x2, y2);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
how(2);
preparation;
canvas.ellipse(x1, y1, x2, y2);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
how(3);
preparation;
canvas.ellipse(x1, y1, x2, y2);
end;
// Falls man nur
Kreise (als Sonderform der Ellipse) abprüfen will, var
x1, x2, y1, y2, mx, my, rd: Integer;
procedure TForm1.FormPaint(Sender: TObject);
begin
canvas.ellipse(x1, y1, x2, y2);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
x1 := 50;
y1 := 50;
x2 := 150;
y2 := 150;
Label1.caption := '';
Vorbereitung;
end;
procedure TForm1.Vorbereitung; // immer bei Ellipsen-Änderung
begin
rd := round((x2 - x1) / 2);
mx := x1 + rd;
my := y1 + rd;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if sqr(mx - X) + sqr(my - Y) < sqr(rd) then
Label1.caption := 'drin'
else
Label1.caption := 'draußen';
end;
|
Zugriffe seit 6.9.2001 auf Delphi-Ecke





