![]() |
Punkt drehen um einen anderen Punkt
Hallo,
ich habe einen PunktA und nen PunktB in nem Koordinatensystem und möchte jetzt PunktB um PunktA in nem best. Winkel rotieren lassen. PunktA könnte z.B. auf [2|2] liegen und PunktB auf [5|3] und soll dann um 90° (natürlich nur als Bsp, sonst beliebige Winkel) gedreht werden und liegt dann auf [1|5] (wenn ich mich nu nicht verrechnet habe -.- ) Nur wie mache ich das mit Delphi? Ich mühe mich da seit gestern ab mit allen Mitteln meines bescheidenen Mathematikwissens (Kl.11), sin,cos und tan, Steigungen usw. , aber so wirklich funktioniert nichts :/ Google war auch nicht wirklich ergiebig bei meiner Suche (wohl, weil ich nicht weiß nach was ich suchen soll?) Achja, es geht letztendlich um das Drehen eines Dreiecks um einen seiner Eckpunkte, was sich ja auf das Drehen von 2 Punkten um einen dritten vereinfachen lässt. Viele Grüße Florian |
Re: Punkt drehen um einen anderen Punkt
Code:
Kann man noch kürzen!
procedure DrehePunkt (P: TPoint; AWinkel: single; ADrehPunkt: TPoint);
var H: TPoint; begin H.X := P.X-ADrehpunkt.X; H.Y := P.Y-ADrehpunkt.Y; H.X := H.X*Cos (AWinkel); // Winkel im Bogenmaß H.Y := H.Y*Sin (AWinkel); Result.X := H.X+ADrehpunkt.X; Result.Y := H.Y+ADrehpunkt.Y; end; |
Re: Punkt drehen um einen anderen Punkt
Na, wenn dann aber:
Delphi-Quellcode:
Ne Procedure hat schließlich kein Rückgabewert
function DrehePunkt (P: TPoint; AWinkel: single; ADrehPunkt: TPoint): TPoint;
var H: TPoint; begin H.X := P.X-ADrehpunkt.X; H.Y := P.Y-ADrehpunkt.Y; H.X := H.X*Cos (AWinkel); // Winkel im Bogenmaß H.Y := H.Y*Sin (AWinkel); Result.X := H.X+ADrehpunkt.X; Result.Y := H.Y+ADrehpunkt.Y; end; air |
Re: Punkt drehen um einen anderen Punkt
also mit cos und sin biste schon richtig.
Delphi-Quellcode:
falls was nicht stimmt, tausch mal sin und cos...aber das prinzip ist imho richtig...
radius:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//Pytagoras
winkel=asin(abs(x1-x2)); winkel=winkel+90; x2:=x1+sin(winkel)*radius; y2:=y1+cos(winkel)*radius; |
Re: Punkt drehen um einen anderen Punkt
Im Beispiel von gklgereon sind sin und cos immer vertauscht. Cos gibt die Ankathete (x), Sin die Gegenkathete (y). Ebenso musst du es bei asin bzw. acos umtauschen (wie er ja bereits vermutet hat ;))
Greetz alcaeus |
Re: Punkt drehen um einen anderen Punkt
Zitat:
Delphi-Quellcode:
gehts auch noch nicht (hatte round() und Rückgabewert gefehlt)... das streckt oder verzerrt nur :/
function DrehePunkt (P: TPoint; AWinkel: single; ADrehPunkt: TPoint) : TPoint;
var H: TPoint; begin H.X := P.X-ADrehpunkt.X; H.Y := P.Y-ADrehpunkt.Y; H.X := round(H.X*Cos (AWinkel)); // Winkel im Bogenmaß H.Y := round(H.Y*Sin (AWinkel)); Result.X := H.X+ADrehpunkt.X; Result.Y := H.Y+ADrehpunkt.Y; end; |
Re: Punkt drehen um einen anderen Punkt
GELÖSCHT
ROUND ist richtig hatte ich nicht dran gedacht, und Denkfehler:
Code:
P.X := Round (Hx*Cos(AWinkel)-Hy*Sin(AWinkel);
P.Y := Round (Hx*Sin(AWinkel)+Hy*Cos(AWinkel); |
Re: Punkt drehen um einen anderen Punkt
Zitat:
|
Re: Punkt drehen um einen anderen Punkt
Zitat:
|
Re: Punkt drehen um einen anderen Punkt
oww nee, ist doch noch nicht ganz das was ich wollte...
Der Punkt sollte in ner Kreisbahn um den anderen Punkt gedreht werden, mit dem Code wird die Bahn aber Elliptisch (wenn x2-x1 != y2-y1) .... was muss ich daran verändern? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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