Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#4

AW: Linie mit bestimmter Länge und Winkel zeichnen

  Alt 26. Apr 2014, 23:51
@milos

Was hast du denn alles in die Exe gepackt. Du hast paar Zeilen drin und das macht 2,2 MB Exe?

Wenn ich das richtig verstehe willst du eine Linie Isometrisch zeichnen. Wenn nicht, kannst du den Rest überlesen, ansonsten habe ich mal Just4Fun eine Funktion zum Zeichnen einer IsoLine entwickelt:
Delphi-Quellcode:
type
  TIsoOrientation = (ioTopLeft, ioTopRight, ioBottomLeft, ioBottomRight);

procedure DrawIsoLinie(Canvas: TCanvas; Orientation: TIsoOrientation; x1, y1, cLength: Integer; var x2, y2: Integer);
var
  a, b,
  alpha: Double;
begin
  a := cLength * Sin(DegToRad(30));
  b := Sqrt(Sqr(cLength) - Sqr(a));

  case Orientation of
    ioTopLeft : begin
                      x2 := x1 - Round(b);
                      y2 := y1 - Round(a);
                    end;
    ioTopRight : begin
                      x2 := x1 + Round(b);
                      y2 := y1 - Round(a);
                    end;
    ioBottomLeft : begin
                      x2 := x1 - Round(b);
                      y2 := y1 + Round(a);
                    end;
    ioBottomRight : begin
                      x2 := x1 + Round(b);
                      y2 := y1 + Round(a);
                    end;
  end;

  Canvas.MoveTo(x1, y1);
  Canvas.LineTo(x2, y2);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x1, y1, x2, y2, Laenge: Integer;
  Richtung: TIsoOrientation;
  //ioTopLeft für linksoben, ioTopRight für rechtsoben, ioBottomLeft für untenlinks, ioBottomRight für untenrechts
begin
  x1 := 100;
  y1 := 100;
  Laenge := 141;
  Richtung := ioTopRight;
  DrawIsoLinie(Canvas, Richtung, x1, x1, Laenge, x2, y2);

  ShowMessage(Format('Linie beginnt bei x1 = %d; y1 = %d und endet bei x2 = %d; y2 = %d',
    [x1, y1, x2, y2]));
end;
Ich hab sie nicht geprüft ob sie richtig zeichnet. Mit Orientation sagst du ob es nach obenlinks, untenlinks, obenrechts oder untenrechts geht, also die Richtung, cLength die Länge, x1 und x2 die Startposition. x2 und y2 sind Rückgabewerte, also nichts angeben, sondern nur Variablen setzten. Das ist die Position wo die Linie aufgehört.

//Edit:

Ich sehe gerade einen kleinen Fehler. Es gibt noch die Richtung rauf und runter, das habe ich vergessen. Sollte aber kein Problem sein das zu erweitern, sind ja nur gerade Linien.

Geändert von Popov (27. Apr 2014 um 00:26 Uhr)
  Mit Zitat antworten Zitat