![]() |
Wie geht das mit den Winkeln?
Hallo,
ich bins schon wieder habe es jetzt hin bekommen das mir das Programm ein Polygon zeichnet, leider bin ich immer noch nicht weiter. Mein Problem ist die Umsetzung von Formeln in Programmiersprache und die Bestimmung der Variablen. :wiejetzt: Meine Formeln um die Drehung zu bekommen sind: x'=(x-u)*cos w + (y-v)*sin w + u y'=(x-u)*sin w + (y-v)*cos w + v u:= xp[1] v:= yp[1] x:= xp[i] y:= yp[i] würde dann mit einer FOR-Schreife beginnen for i:=1 to n do Weiß aber nicht wie ich die Angaben von sin w und cos w in var setzen soll (real, array, integer)??? :gruebel: Freue mich und danke euch schon mal im Voraus für euere Hilfe. :kiss: sweety |
DP-Maintenance
Dieses Thema wurde von "Phoenix" von "Fragen / Anregungen zur DP" nach "Sonstige Fragen zu Delphi" verschoben.
Ist sicher keine Anregung zur DP ;-) |
Re: Wie geht das mit den Winkeln?
Du kannst real nehmen, aber nenn es gleich double (bzw. array of double).
Double ist der gängige Typ für Fließkommazahlen und die FPU (Floating-Point-Unit) rechnet immer mit Double (zumindest in ner 32bit CPU). Deine Mathematik kommt mir nur komisch vor, aber wenn es klappt. Ansonsten: Ich hätte den Weg (über Polarkoordinaten bzw. komplexe Zahlen) -z0 beinhaltet die Koordinaten (in komplexer Form) des Drehpunktes -z1 sind die Koordinaten des zu verschiebenden Punktes -z1' die neuen Koordinaten ==> z1'=z0+r*exp(i*(w1+w2)) r ist dabei der Abstand zwischen z0 und z1 w1 ist der anfangswinkel w2 der zu drehende Winkel --> x'=u+r*sin(w1+w2) --> y'=v+r*sin(w1+w2) r=sqrt((u-x)²+(v-y)²) w1=arg(u-x,v-y) Edit: ![]() |
Re: Wie geht das mit den Winkeln?
aus der oh-hilfe...
Zitat:
|
Re: Wie geht das mit den Winkeln?
hey ;)
ich nutze gern diese funktion sie ist sehr einfach zu handhaben ^^ r ist der radius, a der winkel, x und y ist der abstand von dem du ausgehst px,py sind die koordinaten des punktes den du drehen willst mx,my sind die mittelpunktkoordinaten rotpoint is der gedrehte punkt
Delphi-Quellcode:
benutze so egnaue werte wie möglich und runde so spät wie möglich ;)r:=sqrt((px-mx)*(px-mx)+(py-my)*(py-my)); pii:=PI/180; rotpoint:=get_rot_point(r,a,mx,my); function get_rot_point(r,a,x,y:double):TPoint; begin Result.X:=round(r*cos(a*pii)+x); Result.Y:=round(r*sin(a*pii)+y); end; kleiner tipp: wenn du ein bild drehen möchstest, denn geh vom gedrehten bild aus und hol dir über die rot funktion die farben der original pixel, wenn du das bild von original einfach drehst, entstehen löcher. andersrum kriegst du vielleicht ein paar falsche farbwerte für ein paar pixel die sieht man aber schlechter als löcher ;) beim rotieren gibt es immer daten verlust ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15: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 by Thomas Breitkreuz