Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Zeichnen einer Linie im 45° Winkel

  Alt 22. Dez 2005, 11:59
Mit Delphi-Referenz durchsuchenMath.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
  Mit Zitat antworten Zitat