Schwerpunksbestimmung

    • GM 8

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Schwerpunksbestimmung

      Hey Leute ich bin zurzeit auf der Suche nach einem
      Algorithmus der mir den Schwerpunkt mehrere im Raum verteilter gleicher Objekte ermittelt,

      z.b befinden sich im Raum mehrere Objekte die unterschiedlich verteilt sind, und an z.b 1 stelle gibt es einen Punkt an dem sich mehrere Objekte in näherer Umgebung befinden, ich möchte diesen Punkt nun ermitteln, aber bisher waren alle meine Versuche vergeblich

      Hat jemand eine Idee, wie man das ganze Angehen könnte, bzw wie man sowas am besten Programmiert, sollte natürlich recht Performance optimiert funktionieren ^^

      Wäre für Ideen / Vorschläge /Beispiele / Lösungen ,.... sehr dankbar

      EDIT:

      Hab noch ein Bild angehängt, damits besser verständlich wird

      Grüßle Blayde
      Bilder
      • Schwerpunkt.png

        9,67 kB, 800×600, 145 mal angesehen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Blayde () aus folgendem Grund: Blöder Themen name XD

    • Der klassische Schwerpunkt von gleichmäsigen Körpern ist der Der Punkt mit dem geringsten Gesamtabstand zu allen Körpern.
      D.h. wenn ich mich nicht irre, der Durchschnitt der Koordinaten.
      Also addiere alle x-koordinaten und teile durch die Anzahl. Dann machst du das selbe mit den y-Koordinaten.

      Edit: Häufigkeitsverteilungsalgorithmus erscheint mir aber ein recht unpassender Begriff, lol.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Jo beim Thema hast wohl recht, XD

      Habs geändert,

      werde deinen Ansatz mal probieren, hatte schon so en ähnlichen, indem ich alle Objekte überprüfe und jeweils die alte Koordinate - die neue durch 2 Teile um somit den Schwerpunkt zu bekommen, allerdings hat meine Umsetzung net funktioniert XD

      EDIT:

      deine Methode hat zwar funktioniert, aber ich möchte dass sich der Schwerpunkt immer bei den meisten Objekten befindet und nicht im Mittelpunkt aller Objekte ^^

      also wie im Bild nur weiter rechts oben im Haufen
      Bilder
      • Schwerpunkt.png

        9,39 kB, 637×479, 85 mal angesehen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Blayde ()

    • "immer bei den meisten Objekten" ist leider mathematisch extrem ungenau formuliert...
      Du willst also dass der Punkt in der mitte des grössten Haufens ist? Und dabei sollen dann bei der Berechnung des Schwerkraftpunkts alle anderen Instanzen Ignoriert werden, richtig?

      Denke dann solltest du erstmal eine rekursiven Algorithmus schreiben der den grössten Haufen findet. Also alle Objekte in eine Liste eintragen, bei irgend einem anfangen und prüfen wie gross der Abstand zur nächstgelegenen instanz ist. Ist der Abstand kleiner als ein von dir bestimmter Maximalabstand, dann wird diese Instanz markiert und sucht widerum ebenfalls nach allen Instanzen in Reichweite die nicht markiert sind (rekursiv).
      Höhrt der Algorithmus dann auf weil keine weiteren Instanzen mehr in Reichweite sind, löscht du aus der Liste alle unmarkierten Instanzen und fügst nur diese in eine neue Liste ein. Mit dieser führst du dann den Algorithmus erneut aus. Das ganze wiederholt sich so lange bis keine Instanzen mehr übrig sind.
      Die Liste mit den meisten Einträgen ist nun der gröste Haufen...
      Von diesem berechnest du dann den Schwerkraftspunkt.

      Das ist kein sonderlich schneller Algorithmus... also hoffe ich mal dass das nicht ins Step event muss.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Doch genau so in etwa hatte ich es vor :P

      Ins step event packen XD

      Aber wie du schon sagtest is diese Methode nicht sehr schnell, und ich selbst schätze meine Programmierkenntnisse nicht so toll ein das ich das mal eben kurz hinkriegen würde. :P
      Ich bin gerade dabei mir zu überlegen ob ich das ganze nicht ein wenig anderst gestalte weil es so ausschaut als sei diese Methode doch etwas kompliziert, und ich hab eigentlich wenig lust, mega viel Zeit in etwas zu stecken was im Spiel später dann kaum einfluss hat =)

      Aber trotzdem Danke DragonGamer für deine Hilfestellung =)

      Grüßle Blayde
    • Nähere Details zum Spiel möchte ich jetzt noch nicht preisgeben vorallem weil ich noch gar nicht weiss in wie weit ich es vollenden werde ^^

      In meinem Spiel, gibt es eine Schafherde, diese Herde wird vom Spieler zum Zielort getrieben, um das ganze zu erleichtern bzw auch ein wenig realistischer zu machen hab ich mir überlegt noch einen Hund einzufügen der die Schafe zusammentreibt, da diese vor dem Schäfer flüchten,....

      Und für die KI des Hundes dachte ich mir solch einen Algorithmus zu machen, der den Mittelpunkt des größten Haufens ermittelt und dann kann ich den Hund so programmieren das er alle Schaffe die nicht in diesem Kreis sind, dahin scheucht,....


      Hoffe das ist verständlich

      Meine neue Überlegung war, das ich nun ein Herdenoberhaupt bestimme, das immer den Mittelpunkt bestimmt an dem sich alle Schafe aufhalten sollen, ist in der realität ja auch so =)

      Grüßle Blayde
    • Nur ne Idee, aber du könntest das ganze ja auch versuchen über Kollisionen zu lösen. Also gibts du jeden Objekt ne Hitbox einer bestimmten größe und prüfst, wie viele andere Objekte da drinne sind. Somit könntest du zumindest recht einfach ermiiteln, bei welchem am meisten andere in der Nähe sind. Ist vermutlich aber ne doofe Idee.
    • Was du versuchen könntest ist volgendes:

      Iteriere durch alle deine Objekte und miss die abstände zwischen ihnen.
      Also: Du suchst dir 1 Ball und misst den Abstand zum AM NÄCHSTEN GELEGENEN Ball. (instance_nearest z.B)
      Wenn der nächste ball unter (einer von dir bestimmten) distanz ist, suchst du von diesem Ball aus wieder den nähesten, usw...
      (Wichtig hierbei ist dass die Bälle die du bereits abgeklappert hast, nicht mehr abgefragt werden)
      All diese Bälle werden dabei gleichzeitig in eine Liste gespeichert.

      Das machst du solange bis ein Ball kommt der deine maximal zulässige distanz überschreitet.
      Wenn dies passiert, erstellst du eine Weitere Liste (die unabhängig zu der vorherigen ist)
      und das oben beschriebene Prozedre beginnt von neuem. (Blos dass du diesmal alle Bälle in die andere Liste reinspeicherst)

      Wenn wieder die maximal zulässige distanz überschritten wird, erstellst du wieder eine Liste.
      Usw...

      Am Ende des Prozesses solltest du mehrere Listen haben, die die verschiedenen Objekte beinhalten die zu einem bestimmten abstand voneinander lagen.
      Was du nunroch machen musst, ist die Liste mit den meisten Einträgen rauszusuchen und dann den Schwerpunkt von allen Objekten berechnen, die in dieser Liste eingetragen sind.

      Das Verfahren ist natürlich nicht perfekt, jedoch ist es wenigstens ein Ansatz den man durch weitere Kriterien bzw Abfragen erweitern kann.

      /Edit: @Dragongamer
      UPS! Tatsache. XD
      Genau das passiert wenn man die einzelnen Posts nicht wirklich liest. Sorry. :/

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von LEWA ()

    • @LEWA, ist das nicht genau das selbe was ich beschrieben habe? xD
      Zumindest hatte ich das gemeint, lol.

      EDIT: Hmm.. doch nicht ganz genau das selbe... deine Idee klingt irgendwie ein wenig efektiver auch wenn mir die Unterschiede nicht ganz klar sind...

      EDIT2:

      @Blayde Eventuell könntest du es doch versuchen diese Algorithmen umzusetzen, denn ein Vorteil von rekursiven Alrgoritmen ist dass man sie mit eines Mühe aufspalten kann. Du könntest z.B. nur einen Teil der Berechnung jeden Step ausführen lassen, so dass das Ergebnis z.B. nur alle 30 Steps fest steht.
      Das wäre performancetechnisch sinnvoller und auch wenn das Ergebnis etwas ungenau ist (unter ganz wenigen Umständen falsch), wäre das verkraftbar - sofern deine Schafe keinen Raketenantrieb haben :D

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DragonGamer ()