AW: Bubblesort Problem
[QUOTE=EWeiss;1395399]
Zitat:
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:
Du musst nur wissen was du haben willst und entsprechend sortieren. |
AW: Bubblesort Problem
Zitat:
Richtig! Mal der komplette part.
Delphi-Quellcode:
Bubblesort habe ich schon gepostet.
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; gruss |
AW: Bubblesort Problem
Da liegt vermutlich das Problem:
Delphi-Quellcode:
Gesucht wird eine Abbildung des Winkels auf die Tiefe in etwa so:
zorder[K] := round(Angle - 90);
if zorder[K] > 180 then zorder[K] := 360 - zorder[K];
Code:
Ist natürlich abhängig davon wie das Koordinatensystem in Bezug auf den Betrachter ausgerichtet ist.
zorder
180 - 270° 090 - 0° 180° 000 - 90° |
AW: Bubblesort Problem
Zitat:
Könntest du das bitte als Quelltext interpretieren ? gruss |
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. |
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. |
AW: Bubblesort Problem
Zitat:
Kurz gesagt die Objekte werden in der Reihenfolge (ZOrder) nicht richtig gezeichnet. gruss |
AW: Bubblesort Problem
Lös dein Problem doch erstmal auf Papier, dann kann man über eine Umsetzung reden.
|
AW: Bubblesort Problem
Zitat:
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 |
AW: Bubblesort Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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