Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Wie geht das mit den Winkeln? (https://www.delphipraxis.net/84864-wie-geht-das-mit-den-winkeln.html)

sweety 22. Jan 2007 23:07


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 23. Jan 2007 09:22

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Fragen / Anregungen zur DP" nach "Sonstige Fragen zu Delphi" verschoben.
Ist sicher keine Anregung zur DP ;-)

sirius 23. Jan 2007 09:51

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: Vektor drehen

ibp 23. Jan 2007 09:53

Re: Wie geht das mit den Winkeln?
 
aus der oh-hilfe...
Zitat:

function Sin(X: Extended): Extended;
X ist ein Ausdruck des Typs Real. Sin gibt den Sinus des mit X angegebenen Winkels im Bogenmaß (Rad) zurück.

jokerfacehro 23. Jan 2007 20:43

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:

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;
benutze so egnaue werte wie möglich und runde so spät wie möglich ;)
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 16:53 Uhr.

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