Delphi-PRAXiS
Seite 3 von 7     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   FreePascal Bubblesort Problem (https://www.delphipraxis.net/186830-bubblesort-problem.html)

Neutral General 7. Mär 2018 08:49

AW: Bubblesort Problem
 
[QUOTE=EWeiss;1395399]
Zitat:

Welche Reihenfolge kann ich nicht sagen da ich es nach Sichtbarkeit versuche zu korrigieren.
Vermute bald es es sich mit Bubblesort nicht machen lässt.
Dein Problem ist nicht der Sortieralgorithmus, sondern die Tatsache dass du gar nicht wirklich weißt was du haben willst.
Du musst wissen in welcher Reihenfolge du deine Zahlen haben willst und du musst wissen wie du deine Objekte mit Hilfe der sortierten Zahlen richtig darstellen kannst.
Und bei mindestens einem von beiden hakt es bei dir grad. Dir muss nur bewusst sein wo genau es hakt.
Es klingt nämlich grad danach als hätte dein eigentliches Problem nichts mit Sortieren zu tun.

Edit:
Zitat:

Oder weist du nicht wie die Tiefe miteinander zu vergleichen ist?
Richtig!
Habe es mit Bubblesort versucht was aber anscheinend nicht geht.
Bubblesort sortiert deine Zahlen so wie du sie haben willst. Bubblesort GEHT zu 100%.
Du musst nur wissen was du haben willst und entsprechend sortieren.

EWeiss 7. Mär 2018 08:52

AW: Bubblesort Problem
 
Zitat:

sondern die Tatsache dass du gar nicht wirklich weißt was du haben willst.
Das ich nicht weis wie ich es sortieren soll..
Richtig!

Mal der komplette part.
Delphi-Quellcode:
procedure DrawCarousel(WinHandle: HWND);
var
  K, I: Integer;
  Angle, anglePi: single;
  rc: TRect;
  speed, fl, z, scale: Single;
  xcenter, ycenter, zcenter: Integer;
  radius: Integer;
  x, y: Integer;
  PiDiv180: Double;
  zorder: array [0..9] of Integer;
  faceorder: array [0..9] of Integer;
begin
    if bAnimate then
    begin
       y     := trbY.GetTrackValue(trbY.Handle);
       speed := trbSpeed.GetTrackValue(trbSpeed.Handle) div 4;
       fl    := trbFocallength.GetTrackValue(trbFocallength.Handle) / 100;

       if fl < 0.02 then
         fl := 0.001;
       PiDiv180 := 1.74532925199433E-2;

       GetClientRect(HSprCtrl, rc);
       xcenter := (rc.Right - 128) div 2;
       ycenter := (rc.Bottom - 128) div 2;
       zcenter := ycenter div 2;
       radius  := round(rc.Right / 3.675);

       for K := High(zorder) downto 0 do
       begin
         Angle := gSpriteData[K].rAngle;
         anglePi := Angle * PiDiv180;
         z := sin(anglePi) * radius + zcenter;
         scale := fl / (fl + z);
         x := round(cos(anglePi) * radius);
         gSpriteData[K].xPos := round(x * scale + xcenter);
         gSpriteData[K].yPos := round(y * scale + ycenter - y);

         zorder[K] := round(Angle - 90);
         if zorder[K] > 180 then
           zorder[K] := 360 - zorder[K];

         faceorder[K] := K;

         if bMoveToLeft then
         begin
           Angle := Angle - speed;
           if Angle < 1 then
             Angle := 360
         end else
         begin
           Angle := Angle + speed;
           if Angle > 359 then
             Angle := Angle - 360;
         end;
         gSpriteData[K].rAngle := round(Angle);

         // Skalierungsfaktor berechnen
         if Check3Ddepth.GetCheckButtonStatus(Check3Ddepth.Handle) then
           gSprCtrl.GD_SetObjectScale(gSpriteData[K].ID, (ABS(zorder[K]) mod 182) * 0.0027777 + 0.5)
         else
         gSprCtrl.GD_SetObjectScale(gSpriteData[K].ID, 1);

         // Alpha Kanal unschalten
         if CheckOpacity.GetCheckButtonStatus(CheckOpacity.Handle) and (fl > 0.999) then
           gSprCtrl.GD_SetObjectAlpha(gSpriteData[K].ID, round(MIN(100 * scale, 255)), false)
         else
         gSprCtrl.GD_SetObjectAlpha(gSpriteData[K].ID, 255, false);

         gSprCtrl.GD_SetObjectXY(gSpriteData[K].ID, gSpriteData[K].xPos, gSpriteData[K].yPos);

         if CheckSelfRotation.GetCheckButtonStatus(CheckSelfRotation.Handle) then
           gSprCtrl.GD_SetObjectAngle(gSpriteData[K].ID, round(gSpriteData[K].rAngle), false)
         else
         gSprCtrl.GD_SetObjectAngle(gSpriteData[K].ID, 0, false);
       end;

       BubbleSort(zorder, faceorder);

       // Sprite ZOrder setzen
       I := faceorder[0];
       if bMoveToLeft then
       begin
         inc(I);
         if I > (ID_MAX_SPRITE - 1) then
           I := 0;
       end;

       gSprCtrl.GD_SetObjectZorder(gSpriteData[I].ID, GD_ORDER_BOTTOM);
       gSprCtrl.GD_SetObjectZorder(gSpriteData[faceorder[ID_MAX_SPRITE - 1]].ID, GD_ORDER_TOP);

       if CheckMarquee.GetCheckButtonStatus(CheckMarquee.Handle) then
         DrawMarquee(rc.Right);

       gSprCtrl.GI_UpdateWindow(HSprCtrl, false);
    end;
end;
Bubblesort habe ich schon gepostet.

gruss

Blup 7. Mär 2018 10:50

AW: Bubblesort Problem
 
Da liegt vermutlich das Problem:
Delphi-Quellcode:
 zorder[K] := round(Angle - 90);
 if zorder[K] > 180 then
   zorder[K] := 360 - zorder[K];
Gesucht wird eine Abbildung des Winkels auf die Tiefe in etwa so:
Code:
zorder
180 -       270°

090 -   0°      180°
   
000 -       90°
Ist natürlich abhängig davon wie das Koordinatensystem in Bezug auf den Betrachter ausgerichtet ist.

EWeiss 7. Mär 2018 11:00

AW: Bubblesort Problem
 
Zitat:

Zitat von Blup (Beitrag 1395434)
Da liegt vermutlich das Problem:
Delphi-Quellcode:
 zorder[K] := round(Angle - 90);
 if zorder[K] > 180 then
   zorder[K] := 360 - zorder[K];
Gesucht wird eine Abbildung des Winkels auf die Tiefe in etwa so:
Code:
zorder
180 -       270°

090 -   0°      180°
   
000 -       90°
Ist natürlich abhängig davon wie das Koordinatensystem in Bezug auf den Betrachter ausgerichtet ist.

Verstehe nicht was du mit der Abbildung sagen willst. sorry
Könntest du das bitte als Quelltext interpretieren ?

gruss

Blup 7. Mär 2018 11:50

AW: Bubblesort Problem
 
Die Objekte scheine in dem Projekt in einem Kreis vor dem Betrachter angeordnet.
Deshalb ist der Abstand vom Betrachter abhängig vom Winkel, in dem die Objekte angeordnet sind.
Gesucht wird eine Funktion die ein Information über den Tiefenabstand Z vom Betrachter liefert.

Delphi-Laie 7. Mär 2018 11:56

AW: Bubblesort Problem
 
Emil, brich doch das Problem bitte mal auf das wesentliche herunter!

Ständig wirfst Du 2D- und 3D-Koordinaten hier in den Raum (sind diese Informationen für die Hilfebemüher wirklich relevant?), obwohl es doch "nur" um das Sortieren eines eindimensionalen Arrays, also Vektors geht.

Ehrlich gesagt, habe ich Dein Problem bis jetzt nicht verstanden.

Irgendeine eindeutig bestimmte Reihenfolge müssen Deine Daten doch haben, ansonsten muß man sich über einen Sortieralgorithmus nicht einen Gedanken machen, weil dann ein solcher ins Leere liefe.

EWeiss 7. Mär 2018 12:19

AW: Bubblesort Problem
 
Zitat:

Ehrlich gesagt, habe ich Dein Problem bis jetzt nicht verstanden.
Ist auch schwierig zu verstehen.. bzw. schwer zu erklären ohne das man das Projekt in Aktion sieht.
Kurz gesagt die Objekte werden in der Reihenfolge (ZOrder) nicht richtig gezeichnet.

gruss

TiGü 7. Mär 2018 12:27

AW: Bubblesort Problem
 
Lös dein Problem doch erstmal auf Papier, dann kann man über eine Umsetzung reden.

EWeiss 7. Mär 2018 12:36

AW: Bubblesort Problem
 
Zitat:

Zitat von TiGü (Beitrag 1395452)
Lös dein Problem doch erstmal auf Papier, dann kann man über eine Umsetzung reden.

Versuche es gerade mit Pappe.
Oder sollte ich vielleicht doch Papier nehmen.. Hmmm :idea:
Sehe schon komme hier nicht weiter aber wird schon vielleicht bekomme ich noch einen Geistesblitz.

gruss

madas 7. Mär 2018 12:58

AW: Bubblesort Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1395453)
Zitat:

Zitat von TiGü (Beitrag 1395452)
Lös dein Problem doch erstmal auf Papier, dann kann man über eine Umsetzung reden.

Versuche es gerade mit Pappe.
Oder sollte ich vielleicht doch Papier nehmen.. Hmmm :idea:
Sehe schon komme hier nicht weiter aber wird schon vielleicht bekomme ich noch einen Geistesblitz.

gruss

Meinst Du mit Z-Index sowas hier?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.
Seite 3 von 7     123 45     Letzte »    

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