![]() |
Canvas Zeichnung drehen
Hallo ich wollte fragen ob es irgendwie möglich ist eine canvas zeichnung um 90 grad zu drehen!?
wollte z.b.: diese männchen hier so drehen das es auch sieht als ob es liegt ;)
Delphi-Quellcode:
Form1.Canvas.Ellipse(xpos-10,510,xpos+10,530);
Form1.Canvas.moveto(xpos,530); Form1.canvas.LineTo(xpos,560); |
Re: Canvas Zeichnung drehen
90° in welche Richtung? Im einen Fall einfach X/Y-Koordinaten tauschen.
Dust Signs |
Re: Canvas Zeichnung drehen
richtung ist miregal soll sich halt hinlegen so das männchen... das problem besteht heirbei nur das das flüssig aussehen soll also soll es in mehreren schritten geschenen...
das heißt das man auch sieht wie das männchen sich "hinlegt"... weisst du wie man das machen kann? normale bnidler darf ich ledier nicht benutzen ;) |
Re: Canvas Zeichnung drehen
Einen Timer vielleicht? Dann klappt das mit dem Tauschen der Koordinaten aber nicht mehr.
Dust Signs |
Re: Canvas Zeichnung drehen
![]() Mit diesen Funktionen kannst du einen Punkt um den Ursprung drehen. Wenn du um einen anderen Punkt drehen möchtest, dann musst du den Punkt zuerst verschieben, dann drehen und wieder zurückverschieben. |
Re: Canvas Zeichnung drehen
ah das sieht ja schon mal gut aus danke für die hilfe da ich aber grade erst mit delphi angefangen habe weiss ich nicht genau wie ich mein männchen da jetz einbringen soll... ist mir alles ein wenig unübersichtlich..könntest du mir das ein wenihg veranschaulichen?
|
Re: Canvas Zeichnung drehen
so habe jetz das männchen fertig und muss es nur noch drehen dafür soll eine procedure Tmann2.hinlegen in meiner klasse tmann2 erstellt werden...
das ist der bisherige code :
Delphi-Quellcode:
also wie dreh ich das jetz mti dieser funktion weiss echt nicht wie ich das machen soll!?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,Math; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TMann2 = class xpos,ypos : integer ; constructor create(Mx,My :integer); procedure Normal; end; var Form1: TForm1; Mann2: TMann2; implementation {$R *.dfm} procedure TMann2.Normal; begin Form1.Canvas.Ellipse(xpos-10,ypos,xpos+10,ypos+20); Form1.Canvas.Moveto(xpos,ypos+20); Form1.Canvas.LineTo(xpos,ypos+50); Form1.Canvas.LineTo(xpos+10,ypos+70); Form1.Canvas.Moveto(xpos,ypos+50); Form1.Canvas.LineTo(xpos-10,ypos+70); Form1.Canvas.Moveto(xpos,ypos+25); Form1.Canvas.LineTo(xpos-5,ypos+45); Form1.Canvas.Moveto(xpos,ypos+25); Form1.Canvas.LineTo(xpos+5,ypos+45); end; constructor TMann2.create (Mx,My:integer); begin xpos:=Mx; ypos:=My; end; procedure TForm1.Button1Click(Sender: TObject); begin Mann2:=TMann2.create(400,300); Mann2.Normal; end; end. |
Re: Canvas Zeichnung drehen
Delphi-Quellcode:
sowas da ? (is nur kurz skizziert)
function RotateCCW(position,axis: TPoint; alpha: single): TPoint;
var relative: TPoint; begin relative := Point(position.x - axis.x,position.y - axis.y); result.x := axis.x + round(relative.x*cos(alpha) - relative.y*sin(alpha)); result.y := axis.y + round(relative.x*sin(alpha) + relative.y*cos(alpha)); end; edit: jaja.. die fehlerchen... |
Re: Canvas Zeichnung drehen
weiss ich ja nicht genau ich weiss nicht genau was diese funktion bewirkt... deswegen wäre ich echt über ein wenig hilfe dankbar oder wäre es jetz viel arbeit dieses männchen mit der funktion zum drehen zu erweitern..wäre echt eine super hilfe....
|
Re: Canvas Zeichnung drehen
eins vorab: Vorzeichenfehler nicht ausgeschlossen ;)
Ich weiß ja nicht wie Fit du in Mathe bist, aber die Funktion wendet nur eine Rotationsmatrix an. Versuch dir jetzt mal ein normales Koordinatensystem vorzustellen, in dem ein Punkt (2|1) eingezeichnet ist. Jetzt rotiere ich den Punkt um 30° am Ursprung neues x = 2 *cos(30°) - 1 *sin(30°) neues y = 2 *sin(30°) + 1 *cos(30°) sin(30°) = 0.5 cos(30°) = wurzel(3)/2 = ~ 1.732 / 2 neues x = 2 *(1.732 / 2) - 1 *0.5 neues y = 2 *0.5 + 1 *(1.732 / 2) neues x = 1.732 -0.5 = 1.232 neues y = 1 + 0.866 = 1.866 damit ist dein Punkt bei (1.232|1.866) wenn dus dir aufzeichnest, siehste, dass die zwei halbgeraden vom Ursprung aus den Winkel 30° einschließen. Edit: Sprachfehler entfernt *duck* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz