Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Rechteck drehen? (https://www.delphipraxis.net/66872-rechteck-drehen.html)

Flare 5. Apr 2006 19:23


Rechteck drehen?
 
Hey ho!

Ich habe hier desen Quelltext:
Delphi-Quellcode:
procedure drawrect(p1,p2,p3,p4: TPoint);
begin
  Form.Canvas.MoveTo(p1.X, p1.Y);
  Form.Canvas.LineTo(p2.X, p2.Y);
  Form.Canvas.LineTo(p3.X, p3.Y);
  Form.Canvas.LineTo(p4.X, p4.Y);
  Form.Canvas.LineTo(p1.X, p1.Y);  
end;

procedure draw();
var p1,p2,p3,p4: TPoint;
begin
  p1.X := round(position.X + 10*cos(2*Pi/360*-(winkel+45)));
  p1.Y := round(position.Y + 20*sin(2*Pi/360*-(winkel+45)));
  p2.X := round(position.X + 10*cos(2*Pi/360*-(winkel+90+45)));
  p2.Y := round(position.Y + 20*sin(2*Pi/360*-(winkel+90+45)));
  p3.X := round(position.X + 10*cos(2*Pi/360*-(winkel+180+45)));
  p3.Y := round(position.Y + 20*sin(2*Pi/360*-(winkel+180+45)));
  p4.X := round(position.X + 10*cos(2*Pi/360*-(winkel+270+45)));
  p4.Y := round(position.Y + 20*sin(2*Pi/360*-(winkel+270+45)));
  drawrect(p1,p2,p3,p4);
end;
und möchte damit ein Rechteck gedreht darstellen lassen. Nur irgendwie macht der das nicht ganz so wie ich möchte.
Über Canvas.Rectangle geht es nicht, da die Seiten ja schräg sein sollen, was dort ja nicht geht.
Kennt jemand eine Lösung für diese (scheinbar einfache aber für mich doch schwere) Drehung?


Flare

netscanner 5. Apr 2006 20:01

Re: Rechteck drehen?
 
welche drehung meinst du denn?
also dass es so liegt: <> ???

das kann man über polyline machen...
schau dazu einfach mal in der delphi hilfe nach :zwinker:

marabu 5. Apr 2006 20:03

Re: Rechteck drehen?
 
Hallo Willy,

vielleicht kannst du dir hier ein paar Anregungen holen: klick.

Grüße vom marabu

Flare 5. Apr 2006 20:22

Re: Rechteck drehen?
 
Also ich habe mir mal den Programmiertext mit dem Flugzeug angeschaut, verwenden möchte ich ihn nicht, weil ich dazu zu viel umändern müsste aber ich schau mal wie ich die einzelnen Funktionen verwenden kann.
Danke erstmal!


Flare

//Edit: Ich kriege es nicht hin, probiere aber erst morgen weiter.
Ich suche immer noch nach einem Code der mir ein rechteck mit bekannten Ausgangskoordinaten in einem bestimmen Winkel dreht, hat noch jemand Vorschläge für mich?

marabu 5. Apr 2006 21:15

Re: Rechteck drehen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Willy,

hier ein wenig Code, der meine Hinweise aus dem verlinkten Beitrag umsetzt. Der Code ist für ein Dreieck, aber die Anpassung an ein Viereck sollte dich nicht vor unüberwindliche Schwierigkeiten stellen.

marabu

Flare 5. Apr 2006 21:30

Re: Rechteck drehen?
 
Ich habe es jetzt soweit umgebaut, dass es in mein Projekt reinpasst, er möchte aber das TXForms nicht annehmen...
Zitat:

[Error] Roboter.pas(21): Undeclared identifier: 'TXForm'
Und er erkennt auch die Konstanten nicht, wobei ich aber glaube dass es an dieser TXForm liegt.
Was muss ich einbinden oder sonstewas machen damit das geht?


Flare

marabu 6. Apr 2006 05:54

Re: Rechteck drehen?
 
Guten Morgen.

Vielleicht hilft es, wenn du die Unit Windows einbindest?

marabu

Flare 6. Apr 2006 06:31

Re: Rechteck drehen?
 
Stimmt, hilft ^^

Irgendwie hat da meine Delphi-HIlfe gehangen, weil überprüft habe ich es ja...
Das sieht ja jetzt an sich schon schön aus, nur dreht der Sich um einen imaginären Punkt, der irgendwo liegt, der aber eigentlich auf dem Bild in der Mitte liegen soll.
Ich konnte aber nicht erkennen, wo der Mittelpunkt der Drehung eingestellt wird.
Kann es sein, dass ich es danach noch über xf verschieben muss?

Flare

marabu 6. Apr 2006 06:49

Re: Rechteck drehen?
 
Matrix-Operationen werden einfach hintereinander geschaltet (siehe Online-Hilfe). In deinem Fall wird zuerst eine Translation des Angelpunktes in den Ursprung des Koordinatensystems durchgeführt, anschließend wird das Rechteck rotiert und dann wird die Translation wieder rückgängig gemacht. Das ganze geschieht eigentlich mit einer einzigen Matrix, die entsprechend vorbereitet wird.

marabu

Flare 6. Apr 2006 16:21

Re: Rechteck drehen?
 
Nochmals vielen Dank an alle, ich habe jetzt versucht meine Version durchzubringen, ich wollte es unbedingt mit Trigonometrie hinbekommen.
Hier nochmal mein Code:
Delphi-Quellcode:
procedure TRoboter.draw();
var points: array[0..4] of TPoint;
    deg: array[0..4] of Single;
    h,b: single;
    i: integer;
begin
  h := 20;
  b := 10;
  deg[0] := 180 - winkel + arctan(h/b)/Pi*180;
  deg[1] := 180 - winkel + 180 - arctan(h/b)/Pi*180;
  deg[2] := 180 - winkel - 180 + arctan(h/b)/Pi*180;
  deg[3] := 180 - winkel - arctan(h/b)/Pi*180;
  deg[4] := deg[0];
  for i:=0 to 4 do
  begin
    points[i] := Point(round(position.X+b*cos(deg[i]*2*Pi/360)),round(position.Y+h*sin(deg[i]*2*Pi/360)));
  end;
  FForm.Canvas.Polyline(points);
  inherited;
end;
Für diese Überlegung habe ich heute ganze 2 Reli-Stunden gesessen :lol:


Flare

//Edit: Mir fällt gerade auf, dass das nur hinhaut wenn Höhe und Breite des Rechtecks gleich sind (Quadrat), da scheint also was mit dem Faktor nicht zu stimmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf