Autor |
Beitrag |
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 04.02.07 04:13
Für alle die sich jetzt fragen: "Hä, was will der?": ich versteh euch...
Und zwar habe ich eine Liste von Objekten. Diese möchte ich auf konzentrischen Kreisen anordnen, ausgehend von der Mitte. Wie viele Kreise ich für eine bestimmte Anzahl Objekte brauche, habe ich schon.
Nur kriege ich das dann nicht hin, für jedes Objekt die X/Y-Koordinaten auszurechnen. Mein Problem ist der Algorithmus, nicht (jedenfalls noch nicht) die Implementierung. Die Objekte landen immer irgendwo, nur nicht wo sie hinsollen.
Falls mir jemand helfen kann, ich habe:
- Anzahl_Objekte
- Anzahl_Kreise
- Für jeden Kreis:
- Radius
- Anzahl_Objekte/Kreis
- keine Ahnung wie ich das am einfachsten mache
(Verdammt. Den bisherigen Code hab ich schon entnervt gelöscht... War aber eh nichts schönes...)
Danke schonmal,
Sebastian
Einloggen, um Attachments anzusehen!
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
ssb-blume
      
Beiträge: 375
Erhaltene Danke: 7
XP, W7, W8
Deutschland
|
Verfasst: So 04.02.07 10:49
ganz einfach:
fuer jeden Kreis fuer jedes Objekt die Position ermitteln:
der Teil-Winkel ist 2*PI/Anzahl der Objekte.
dann ist fuer jedes Objekt die X- und y-Koordinate und der Winkel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var i: integer; n: integer; r: real; w: read; x, y: integer; rx, ry: integer; for i:=0 to n-1 do begin w:=i*2*pi/n; x:=rx+round(r*cos(w)); y:=ry+round(r*sin(w)); end; |
_________________ Brain: an apparatus with which we think we think.
|
|
Martok 
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 04.02.07 15:20
Das ist der Code, wenn ich nur einen Ring habe. Soweit ist das ja einfach.
Das Problem ist ja der "Umbruch", wenn ein Ring voll ist, bzw. die Tatsache, dass solche existieren.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: So 04.02.07 15:31
Zu wenig information!!!!
Was willst du tun?????
1. Wie viele Objekte passen auf einen Kreis, ist das abhängig von der Größe der Objekte selbst
2. Abstand der Kreise Radius etc.
|
|
azubi_20
      
Beiträge: 593
WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
|
Verfasst: So 04.02.07 15:37
|
|
Martok 
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 04.02.07 15:38
Allesquarks hat folgendes geschrieben: | Zu wenig information!!!!
Was willst du tun?????
1. Wie viele Objekte passen auf einen Kreis, ist das abhängig von der Größe der Objekte selbst
2. Abstand der Kreise Radius etc. |
Das habe ich beides schon ausgerechnet.
Das Problem ist jetzt, die Objekte auf die Ringe zu verteilen.
Da gibt es ja 2 grundsätzliche Ansätze:
Quelltext 1: 2:
| Für jeden Ring: Elemente Positionieren auf Radius_von(KreisNr) |
oder
Quelltext 1: 2: 3:
| Für jedes Objekt: Kreis feststellen Positionieren |
Das Problem ist bei beiden die Feststellung "Ring ist voll, nächster".
Eine Idee hab ich da grade, mal sehen, ob das geht...
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: So 04.02.07 15:56
Naja das hab ich auch schon gesehen aber das ist mir irgendwie zu abstrakt. Ich hab immer gern die Regel.
Ein Objekt muss auf einen neuen Kreis, wenn seine Nummer größer ist als die Summe der Anzahl Objekte der bisherigen Kreise.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| while Objectindex>neuerkreis do begin inc(kreisindex); alterkreis:=neuerkreis; neuerkreis:=neuerkreis+naechsterkreis.anzahl; end; |
so in etwa. Aber wie gesagt ich habe nicht wirklich den Plan was du tun möchtest.
willst du das iterativ machen oder evt. auch das 10 Objekt als zweites zeichnen.
Hast du schon eine Zeichnen routine für deine Objekte?
|
|
Martok 
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 04.02.07 16:15
Allesquarks hat folgendes geschrieben: | Hast du schon eine Zeichnen routine für deine Objekte? |
Jup, ist OpenGL. Das steht auch alles soweit, bisher hatte ich alles auf einem Ring, der dann entsprechend einen größeren Radius erhält. Das fand ich aber nicht so toll, wegen Platzverschwendung innen.
Den Rest hab ich ehrlich gesagt nicht verstanden...
@Löschen: du gar nicht, Beitrag melden und ganz lieb fragen
Ich hab jetzt das. Das Problem ist, die Abstände auf dem 2. Kreis passen nicht (->Anhang)...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| rng:= 0; c:= 0; s:= 0; for i:= 0 to Count-1 do begin if (rng=0) or (c>=Per_Ring(rng)) then begin c:= 0; inc(rng); m:= Per_Ring(rng); m:= Min(m,Count-c); s:= 2*pi / m; DIST:= Ring_Rad(rng); end;
a:= s * i; TglMenuIcon(Icons[i]).Position:= To_V2D(Center.X + cos(a)*DIST, Center.Y + sin(a)*DIST); inc(c); end; |
(Am Design mach ich noch was, der Kontrast ist etwas schlecht...)
Einloggen, um Attachments anzusehen!
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: So 04.02.07 16:26
Also seh ich das richtig, dass du nur den neuen Mittelpunkt übergeben musst ne.
Sind die Objekte denn alle gleich weit voneinander entfernt angeordnet? Dann nämlich:
phase:=2 pi / Anzahl pro kreis*(Objektindex-volleschalencount);
deltax:=cos(phase)*Radius;
deltyy:=sin(phase)*Radius;
volleschalencount entspricht alterkreis
|
|
Blawen
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: So 04.02.07 16:29
_________________ Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro
|
|
Martok 
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 04.02.07 17:35
AllesQuarks, das ist alles Quark
Das hab ich doch so schon drin...
Geht jetzt übrigens. Das wäre ihr Preis gewesen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| rng:= 0; c:= 0; s:= 0; for i:= 0 to Count-1 do begin if (rng=0) or (c>=Per_Ring(rng)) then begin inc(rng); m:= Per_Ring(rng); m:= Min(m,Count-c); s:= 2*pi / m; DIST:= Ring_Rad(rng); end;
a:= s * i; TglMenuIcon(Icons[i]).Position:= To_V2D(Center.X + cos(a)*DIST, Center.Y + sin(a)*DIST); inc(c); end; |
Ein Problem ist jetzt natürlich, das hatte ich gar nicht bedacht: ich habe jetzt Ring 1 mit 13 Elementen, und Ring 2 mit 1-4 Elementen. Sieht doof aus  Wie kann man das noch Balancieren?
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Jetstream
      
Beiträge: 222
|
Verfasst: So 04.02.07 17:49
Du könntest dir die Anzahl der Objekte pro Ring einfach selbst ausrechnen aus der Anzahl der Objekte und Ringe 
_________________ Die folgenden Klangbeispiele sind Ergänzungen zum methodischen Aufbau der Textbeilage und dürfen nicht losgelöst von dieser behandelt werden.
|
|
Martok 
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 04.02.07 17:56
Ist natürlich doof, weil ich die Anzahl der Ringe aus der Anzahl der Objekte/Ring und der Anzahl der Objekte berechne...
Hm, ich geh erstmal Handball gucken 
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Martok 
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 05.02.07 04:22
Das ist doch alles Müll.
Ich hab das jetzt mal in ein Beispiel-Programm gepackt. Ich würde mich freuen, wenn sich das jemand angucken könnte. Auch vom Anordnungs-Konzept her bin ich für alles offen
Derjenige, der den Platz Kreisförmig am besten ausnutzt, kriegt...ähm ja, was eigentlich...  eine Erwähnung in der About-Box 
Einloggen, um Attachments anzusehen!
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Martok 
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Mo 05.02.07 20:07
Jetzt fang ich schon an, mit mir selbst zu reden...
Irgendwie kann man das jetzt als abgeschlossen bezeichnen, auch wenn meine Lösung nicht schön ist...
Falls jemand dran arbeitet, ich nehms also trotzdem gern.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|