AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bubblesort Problem

Ein Thema von GreyFox23 · begonnen am 4. Okt 2015 · letzter Beitrag vom 9. Mär 2018
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:16
Zitat:
ich würde das ganz pragmatisch angehen.
Das hört sich bei euch alles so einfach an.
Ist es aber nicht..

Denn was ich versuche ist ein Object in einem emulierten 3D Raum zu bewegen.
Die Z Order (Tiefe) wie bei 3D gibt es aber bekanntlich in 2D nicht.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:27
Denn was ich versuche ist ein Object in einem emulierten 3D Raum zu bewegen.
Die Z Order (Tiefe) wie bei 3D gibt es aber bekanntlich in 2D nicht.
Ob jetzt 2D/3D, Tiefe, was-auch-immer ist egal.
Unterm Strich willst du nur eine Liste von Zahlen auf eine bestimmte Weise sortiert haben.
Wenn du weißt wie die Reihenfolge sein soll musst du dir dann überlegen wie die Kriterien zum Sortieren aussehen müssen - fertig.

Stimmt denn folgende Sortierung?

-7 -15 -30 -45 -90 0 7 15 30 45 90

Wäre gut wenn du da mal Beispielzahlen nennen würdest und in welcher Reihenfolge du sie genau haben willst.
Falls oben die Reihenfolge korrekt wäre musst du beim Vergleichen von 2 Zahlen schauen ob beide Zahlen negativ sind.
In dem Fall sortierst du absteigend, ansonsten aufsteigend.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:35
Zitat:
Ob jetzt 2D/3D, Tiefe, was-auch-immer ist egal.
Es ist nicht egal ob ich 3 werte oder nur 2 zur Berechnung habe.

x,y,z ist wenn es um die tiefe eines Object geht angenehmer zu berechnen (3D Raum)
als wenn man nur über x,y verfügt.
Unter OpenGL ist das ein Klacks.

Man muss das plastisch sehen nur unfertige Projekte lade ich nicht gerne hoch.
Zitat:
-7 -15 -30 -45 -90 0 7 15 30 45 90
Nein.. Die Berechnung von @Delphi.Narium: funktioniert nicht.
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.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:49
[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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:52
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
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bubblesort Problem

  Alt 7. Mär 2018, 10:50
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Bubblesort Problem

  Alt 7. Mär 2018, 11:00
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
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#8

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:38
Dein Problem ist nicht das Sortieren, egal welche Sortiermethode angewendet wird.
Auch wenn die Darstellung 2D ist, für die Simulation eines 3D Raums müssen die Objekte 3 Koordinaten haben.

Weist du nicht wie die Tiefe der einzelne Objekte ermittelst?
Oder weist du nicht wie die Tiefe miteinander zu vergleichen ist?
Oder liegt ein ganz anderes Problem vor, auf das du noch nicht eingegangen bist?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Bubblesort Problem

  Alt 7. Mär 2018, 08:46
Zitat:
Weist du nicht wie die Tiefe der einzelne Objekte ermittelst?
Doch!
Delphi-Quellcode:
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);
Zitat:
Oder weist du nicht wie die Tiefe miteinander zu vergleichen ist?
Richtig!
Habe es mit Bubblesort versucht was aber anscheinend nicht geht.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 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-2025 by Thomas Breitkreuz