Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Punkt(e) um beliebiges Zentrum drehen (https://www.delphipraxis.net/121268-punkt-e-um-beliebiges-zentrum-drehen.html)

HugoHase 24. Sep 2008 22:02


Punkt(e) um beliebiges Zentrum drehen
 
Einen schönen guten Abend ... und wieder einmal bin ich auf eure Hilfe angewiesen ...
Ich möchte einige Punkte um ein beliebiges Zentrum drehen ... es klappt soweit auch ganz nur verzerrt sich die Figur ... ist mein Algorithmus falsch ??

// cosA und sinA sind Arrays mit den schon errechneten Werten um Rechenzeit zu sparen

Delphi-Quellcode:
function drehen(w : integer; Punkte : TPunkte; dPunkt : TPoint):TPunkte;
var i : integer;
    P : TPoint;
begin
 for i:=0 to length(Punkte)-1 do
 begin
  P:=Punkte[i];
  Punkte[i].X:=round((P.X-dPunkt.X)*cosA[w]-(P.Y-dPunkt.Y)*sinA[w])+dPunkt.X;
  Punkte[i].Y:=round((P.Y-dPunkt.Y)*cosA[w]+(P.X-dPunkt.X)*sinA[w])+dPunkt.Y;
 end;
 result:=Punkte;
end;

ich hoffe ihr könnt mir helfen ... THX

3_of_8 24. Sep 2008 22:11

Re: Punkt(e) um beliebiges Zentrum drehen
 
Sieht richtig aus. Sicher, dass du die Arrays richtig befüllt hast?

jfheins 24. Sep 2008 22:14

Re: Punkt(e) um beliebiges Zentrum drehen
 
w ist der Winkel - sicher dass das ein integer sein soll !?

Ein Double oder Single wäre glaube ich passender ...

Es sei denn, du behandelst den integer als eiune Festkommazahl und ... passt bei den winkelfunktionen auf ;)

3_of_8 24. Sep 2008 22:14

Re: Punkt(e) um beliebiges Zentrum drehen
 
Oder es ist ein Winkel in Grad - wobei eine Ganzzahl durchaus ausreichend sein kann.

jfheins 24. Sep 2008 22:18

Re: Punkt(e) um beliebiges Zentrum drehen
 
Wobei 1. Grad nicht so schön sind wie rad ^^ und 2. sich die Rundungsfehler #auch bei Gard aufaddieren können.

Wenn du z.B. eine Animation machst, in der du eine Figur drehst, wirdst du mit integer imho nur wenig Freude haben :stupid:

Aber für mich sieht das ganze auch an sich richtig aus ...

HugoHase 25. Sep 2008 14:28

Re: Punkt(e) um beliebiges Zentrum drehen
 
danke für das fleißige Antworten,
aber das Problem hat sich gelöst da ich die Punkte jetzt als Extended werte speichere und erst beim Zeichnen runde

Zitat:

Ein Double oder Single wäre glaube ich passender ...
wir leben doch im Zeitalter wo Arbeitsspeicher nicht mehr ganz so wichtig ist ... :roteyes:

Medium 25. Sep 2008 15:07

Re: Punkt(e) um beliebiges Zentrum drehen
 
Öhm, hat damit aber nun eigentlich nichts zu tun. Int und Single sind beide 32 Bit breit, nur dass du mit Single deutlich feinstufiger Winkel übergeben kannst, da es zwischen 0..359 höher auflöst als ein Integer. Wenn überhaupt könntest du mit Rechenzeit argumentieren, wobei du jedoch mit einem Float-Typen an dieser Stelle fast sogar noch schneller sein könntest, da du den Wert ohnehin sofort in eine trigonometrische Funktion wirfst.

Edit: Okay, tust du nicht, du nimmst eine LUT. Dann schaut des wieder anders aus. Erst ganz lesen, dann denken, dann posten - hab ja verstanden ;). Und wenn die LUT für deine Zwecke ausreicht ist da nix gegen einzuwenden :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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