Positionsangabe im Weltraum



  • Unter Umständen ist es einfacher, wenn Du dafür ne Festkommavariable nimmst. Da kannste Du die Ungenauigkeit viel besser abschätzen.

    MfG Jester



  • Geh mal grob von 7 stellen aus. Aber muss es denn tatsächlich genauer, als ein Millimeter sein. Würde es irgendjemand merken, wenn ein Schiff, einen zentel Millimeter weiter rechst steht?



  • Hi,

    nein, das merkt niemand, aber wenn der Server z.B. bei 200 FPS läuft und sich das Schiff langsam bewegt, passiert es bei einer zu geringen Koordinatenauflösung, dass es sich halt gar nicht mehr bewegt!

    Deswegen würde mich halt doch interessieren, wie ihr das jetzt realisieren würdet...

    ChrisM



  • Ein float hat nur 32 bit. Kann also gar nicht genauer sein als ein long.
    Nimm am besten ein long für den Sektor und ein longlong für die genaue Koordinate.



  • Hi,

    das weiß ich. Aber ich wär trotzdem glücklicher, wenn es mit float oder double ginge, denn für die Darstellung brauch ich die Daten als float/double und wenn ich es als longlong hab, muss ich ja immer umrechnen.

    Reicht ein float/double nicht aus, um auf einer Strecke von 0 bis 1000 (100 würden auch reichen), ein Punkt auf z.B. 4 Nachkommastellen genau anzugeben?

    ChrisM



  • Wie wäre es wenn Du verschiedene Gitterverfeinerungen benutzt, quasi erst die Qubenbestimmung auf einem Meter genau und anschließend den entsprechenden Zielqubus mit einer Genauigkeit von Mikrometer etc. ?

    Quasi
    Grob(1,3,10) mit
    Mittel(17,4,6)[von Grob(1,3,10)] und
    Fein(2,2,7)[von Mittel(17,4,6)[von Grob(1,3,10)]]



  • wie wärs mit 2 Winkel(2 mal long double), und die streke in Lichtjahren/Tagen/minuten/sec...(ein mal long int, der rest short)



  • Hi,

    irgendwie alles etwas kompliziert und vor allem groß. Das Ganze wird ja ein Onlinegame und da muss jeder Schuss und alles übertragen werden.

    Nochmal: Denkt ihr, ein long für den 100km^3-Meter großen Sektor und dann einen float/double für die Position in diesem Sektor reichen für eine genügend genaue (~1mm) Positionsbestimmung?

    ChrisM



  • Was genau hat dich denn jetzt an einem int64 für Alles gestört? Haben wir uns im IRC doch verrechnet? 😉



  • Hi,

    naja, mal rechnen...

    Ein __long64 für alles ->
    Gewünschte Auflösung sagen wir mal: 1mm

    2 ^ 64 = 18446744073709551616mm
    = ~18446744073709551m
    = ~61489146912 Lichtsek.
    = ~1949 Lichtjahre

    Das hat ich im Chat ja auch schon raus, aber kann das stimmen?

    ChrisM



  • Ich denk schon daß das stimmt. Warum denn nicht?



  • Hallo,

    ich würde das nicht mit nur einem wert pro dimension machen,
    1. Weil man aus einer mehrteiligen positionsangabe viel mehr herauslesen kann (nutzer/spieler) z.B. Quadrant Sektor Position im Sektor, dann weiss man auf den ersten Blick, in welchem Teil der Galaxie man sich aufhält.
    2. Hat es bestimmt auch einige Vorteile für das Programm, wenn zum Beispiel eine grafische Ausgabe erfolgen soll, musst du ja herausfinden welche Schiffe alle gezeichnet werden sollen, da wäre doch eine Datenstruktur in mehren Teilen sinnvoller, als wenn du alle schiffspositionen durchgehen und vergleichen musst.
    Kollisionsprüfung müsste so auch einfacher sein.

    Gibt noch ein paar mehr Gründe für eine mehrteilige Struktur, aber ich glaube es ist klar was ich meine.

    kibble



  • Ein anderer Vorteil einer Mehrteiligen Struktur ist auch, dass dur eine Datenreduktion herbeiführen kannst, indem du nur wenn nötig (beim Wechsel eines Quadranten) die Angaben der höheren Hierarchie (Quadrant) mitlieferst. Ansonsten kannst du darauf verzichten und lediglich die Position innerhalb des Quadranten versenden, was mit wesentlich weniger Daten auskommen sollte.

    -junix



  • Ich stelle mal die Notwendigkeit eines kontinuierlichen Weltraumes in Frage. Geschwindigkeiten, bei denen Interaktion zwischen Spielern oder Spielobjekten stattfindet, sind normalerweise weit unter einer Geschwindigkeit, die im Maßstab von 1000en von Lichtjahren eine Rolle spielt. Dh es gibt eine Unterscheidung zwischen globalen Koordinaten und Koordinaten, die lokal zu einer Interaktion sind.
    Dabei unterstelle ich, dass du das übliche Sci-Fi-Klischee bedienst, nachdem die Lichtgeschwindigkeit (nur) im Hyperraum überwunden werden kann. Mit "normalen" Geschwindigkeiten Lichtjahre überwinden zu wollen dauert schließlich auch Jahre 😉



  • tja jetzt hast du leider kein problem... wie schade... 😃

    ich kann ja mal eines aufwerfen... fürs rendering auf dem zbuffer bekommst du bei 2^24 unterteilungen zfighting wenn du grosse weiten und nahe objeckte darstellen möchtest 😃

    rapso->greets();



  • das wird man ja noch irgendwie lösen können



  • Bashar schrieb:

    Ich stelle mal die Notwendigkeit eines kontinuierlichen Weltraumes in Frage. Geschwindigkeiten, bei denen Interaktion zwischen Spielern oder Spielobjekten stattfindet, sind normalerweise weit unter einer Geschwindigkeit, die im Maßstab von 1000en von Lichtjahren eine Rolle spielt. Dh es gibt eine Unterscheidung zwischen globalen Koordinaten und Koordinaten, die lokal zu einer Interaktion sind.
    Dabei unterstelle ich, dass du das übliche Sci-Fi-Klischee bedienst, nachdem die Lichtgeschwindigkeit (nur) im Hyperraum überwunden werden kann. Mit "normalen" Geschwindigkeiten Lichtjahre überwinden zu wollen dauert schließlich auch Jahre 😉

    naja, ChrisM hat ja geplannt durch die sektoren das spiel auf mehreren rechnern laufen zu lassen, dafür die "jumpgates"...

    ich wäre aber auch eher dafür sonst normal rumzudüsen, wenn es einen ionenantrieb gebe mit dem man 0.25 der lichtqeschwindkeit erreicht, dann wäre das schon ziemlich cool 😃

    rapso->greets();



  • mwoidt schrieb:

    das wird man ja noch irgendwie lösen können

    klar, gibt viele wege, fragt sich nur ob er überhaupt darüber nachgedacht hat.. deswegen sprach ich es an

    rapso->greetS();



  • rapso schrieb:

    naja, ChrisM hat ja geplannt durch die sektoren das spiel auf mehreren rechnern laufen zu lassen, dafür die "jumpgates"...

    Also klassisch? Ich dachte es sollte wenigstens die Illusion eines kontinuierlichen Weltraumes geschaffen werden. Naja dann hat sich das Thema ja erledigt, man macht einfach wie bei Tie Fighter Sektoren von einigen 100km Kantenlänge und gut 😉

    ich wäre aber auch eher dafür sonst normal rumzudüsen, wenn es einen ionenantrieb gebe mit dem man 0.25 der lichtqeschwindkeit erreicht, dann wäre das schon ziemlich cool

    Genau, mal eben 16 Jahre nach Alpha Centauri zum Wochenendurlaub ohne dass das geringste passiert ...



  • Bashar schrieb:

    rapso schrieb:

    naja, ChrisM hat ja geplannt durch die sektoren das spiel auf mehreren rechnern laufen zu lassen, dafür die "jumpgates"...

    Also klassisch? Ich dachte es sollte wenigstens die Illusion eines kontinuierlichen Weltraumes geschaffen werden. Naja dann hat sich das Thema ja erledigt, man macht einfach wie bei Tie Fighter Sektoren von einigen 100km Kantenlänge und gut 😉

    na ich weiß nicht ob er vielleicht doch einen flüssigen serverwechsel hinbekommen möchte...

    Bashar schrieb:

    ich wäre aber auch eher dafür sonst normal rumzudüsen, wenn es einen ionenantrieb gebe mit dem man 0.25 der lichtqeschwindkeit erreicht, dann wäre das schon ziemlich cool

    Genau, mal eben 16 Jahre nach Alpha Centauri zum Wochenendurlaub ohne dass das geringste passiert ...

    ... aber es wird trotzdem so öde sein. sogar beim M$ flysimulator kann man stundenlang fliegen.

    wenn du einen weltraum von nur einem lichtjahr hättest, würde es ewig dauern bis man sich trift, selbst wenn du sofort wenn du die koordinaten eintippst schon am ziel wärst und 1000 leute mitspielen würden.

    das kann er nur lösen, indem er knotenpunkte des interesses einrichtet... z.b. eine raumbasis, erzfeld...

    und da wäre es von vorteil wenn man relativ langsam wäre, denn dan würde niemand versuchen mit seinem normalen 0.25c-antrieb die 0.1 lichtjahre zu überbrücken 😃

    aber ist ja dann eher konzeption und kein zahlen-genauigkeits-problem 😃

    rapso->greets();


Anmelden zum Antworten