Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
|
Re: Zeichnen einer Linie im 45° Winkel
22. Dez 2005, 11:59
Mit Math.ArcTan2 kannst du dir Einiges an Fallunterscheidungen sparen.
Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FMiddle := Point(X, Y);
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Angle, Length: Single;
dX, dY: Integer;
begin
if ssLeft in Shift then
begin
Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));
Image1.Canvas.MoveTo(FMiddle.X, FMiddle.Y);
if ssShift in Shift then
begin
dX := X - FMiddle.X;
dY := Y - FMiddle.Y;
Length := Sqrt(Sqr(dX) + Sqr(dY));
// Angle auf Vielfaches von 45° runden
Angle := Round(ArcTan2(dY, dX) / (Pi / 4)) * (Pi / 4);
Image1.Canvas.LineTo(FMiddle.X + Round(Cos(Angle) * Length), FMiddle.Y + Round(Sin(Angle) * Length));
end
else
Image1.Canvas.LineTo(X, Y);
end;
end;
Sebastian Moderator in der EE
|
|
Zitat
|