Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Kürzester rotationsweg bei einem Kreis? (https://www.delphipraxis.net/172382-kuerzester-rotationsweg-bei-einem-kreis.html)

Aphton 30. Dez 2012 16:48

AW: Kürzester rotationsweg bei einem Kreis?
 
Klar kannste integer auch verwenden.
Im Grunde macht es in diesem Fall keinen Unterschied, da beide Datentypen (Pointer & Integer) gleichgroß sind.
Meine Variante ist aber bei größeren Datenstrukturen eleganter, da nicht Daten kopiert werden muss (und somit auch schneller)!

Memnarch 30. Dez 2012 16:55

AW: Kürzester rotationsweg bei einem Kreis?
 
Aufjedenfall funktioniert es!^^

Musste allerdings beim kalkulieren der rotation noch ne condition eibauen, damit der wraparound von 0 nach 259 funktioniert.

Delphi-Quellcode:
    if getShortestRotation(FRotation, FRotationGoal) < 0 then
    begin
      if FRotation > 0 then
      begin
        FRotation := Abs((FRotation - 1) mod 360);
      end
      else
      begin
        FRotation := 359;
      end;
    end
    else
    begin
      FRotation := Abs((FRotation + 1) mod 360);
    end;
edit: in diesem fall sit dein weg sogar etwas langsamer, da die pointer erst dereferenziert werden müssen.

Aphton 30. Dez 2012 17:01

AW: Kürzester rotationsweg bei einem Kreis?
 
Hmm stimmt, hab das nicht bedacht.. Dann schreibs um bitte :D

Memnarch 30. Dez 2012 17:03

AW: Kürzester rotationsweg bei einem Kreis?
 
schon geschehen^^.

Aufjedenfall VIELEN DANK^^

Aphton 30. Dez 2012 17:04

AW: Kürzester rotationsweg bei einem Kreis?
 
Keine Ursache ^^

Popov 30. Dez 2012 17:29

AW: Kürzester rotationsweg bei einem Kreis?
 
Wenn du noch Lust hast kannst du das testen. Hab es beim telefonieren geschrieben und muss jetzt weg. Schade zum wegwerfen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, r1, r2: Integer;
begin
  a := 270;
  b := 90;

  //if a = b nicht vergessen

  if a > b then
  begin
    r1 := -(a - b);
    r2 := b + 360 - a;
  end
  else
  begin
    r1 := (b - a) - 360;
    r2 := b - a;
  end;

  ShowMessage(IntToStr(r1) + ' / ' + IntToStr(r2));
end;
Wie gesagt, muss noch richtig getestet werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 Uhr.
Seite 2 von 2     12   

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