kostenloser Webspace werbefrei: lima-city


Größe zweier Körper in der Relevants ausrechnen?

lima-cityForumSonstigesSpam und sonstiges Unvergütetes

  1. Autor dieses Themas

    lol4me

    lol4me hat kostenlosen Webspace.

    Also, ich will dass Objekt1 auf Objekt2 eine Kugel abfeuert.
    Dachte mir, den direkten Weg bekomme ich indem ich ein \"virtuelles\" Quader bilde und dann den Phytagoras verwende.
    Jetzt muss ich noch steuern, indem ich die x- und y-Koordinaten in dem richtigen Verhältniss ändere. Nur wie bekomme ich das raus?
    Durch das Quader kann ich ja die Fläche ausrechnen, und durch / 2 das beider 3-Eckige. Ich dachte mir, dass ich einfach die Relevants zwischen beide 3-Ecke ausrechnen muss, um die Koordinaten dementsprechend zu ändern. Nur wie tue ich das? Mathe war noch nie meine Stärke.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m******s

    Wie bitte? Was willst du nun genau?

    Die Länge des Weges bekommst du, das ist korrekt, \"mit dem Pythagoras\", also
    Wurzel((x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2)
    (Die Koordinaten von Objekt1 sind dann (x1,y1,z1) und von Objekt2 (x1,y1,z1)).
    Aber was meinst du mit \"Die x und y-Koordinaten im richtigen Verhältnis ändern\"? Und wass sind relevants? beschribt doch mal genauer, was du machen willst (denn MEIEN Stärke ist Mathematik, wenn ich weiß, was du machen willst kann ich dir sicher sagen, wie du das rechnest...)

    [edit] Übrigens: Im allgemeinen Sprachgebrauch ist ein Quader dreidimensional und im zweidimensionalen sagt man Rechteck. Einerseits sprichst du von Quader, andererseits von \"Fälche\" und \"x/y-Koordinaten\". Willst du nun 2D, oder 3D arbeiten?

    Beitrag geändert: 19.6.2008 12:24:44 von merovius
  4. Autor dieses Themas

    lol4me

    lol4me hat kostenlosen Webspace.

    Ups. Ich meinte eine 2D-Fläche.
    Z.b. so: http://666kb.com/i/aznkbnj9kbydedwj2.png
    Block Rot feuert auf Block Blau irgend einen Gegenstand ab. Das Objekt hat eine x bzw. y-Koordinate was angibt wo es sich befindet. X ist horizontal. Und jetzt muss ich die X und Y-Koordinaten verändern damit sich das Objekt bewegt.
    Nur wie finde ich raus in welchen Verhältniss ich es ändern muss damit es auf der Spur bleibt?
  5. m******s

    hm, also, ich würde es mehr oder minder Vektoriell lösen.Also, der Startpunkt der Flugbahn hat die Koordniaten (x1|y1), der Endpuntk die Koordinaten (x2|y2). Dann brauchst du noch einen Parameter t, der Quasi die Zeit angibt. Man würde in dem Fall t von 0 bis 1 laufen lassen, dann ist er zum Zeitpunk t=0 am Anfang und zum Zeipunkt t=1 am Endpunkt. Die dazugehörigen Gleichugen für die Koordinaten nach der Zeit t wären dann:

    x = x1 + (x2-x1)*t = x2*t + (1 - t)*x1
    y = y1 + (y2-y1)*t = y2*t + (1 - t)*y1

    (Ob du jeweils die erste oder die zweite Form nimmst ist Geschmackssache).
    Wenn du allerdings das andersrum machen willst, dass dein Schuss mit ner bestimmten Geschwindigkeit fliegt und du keine feste Zeit hast (also, deine Zeit läuft nichst von 0 bis 1, sondern z.B. der Abstand ist 2 Einheiten, die Geschwindigkeit ist 1 Einheit, pro Zeitschritt, d.h. er brauch insgesamt 2 Zeitschritte und dein t läuft damit von 0 bis 2, o.ä.), dann kann ich mir schnell was überlegen und noch mal posten ;)

    [edit] Das ging schnell: Angenommen deine Körper sind den Abstand d auseinander und das Geschoss soll mit der Geschwindigkeit v fliegen. Dann ist
    T = d / v
    die Zeit, die es braucht. Deine Gleichungen werden dann:

    x = x1 + (x2-x1)*t/T = x2*t/T + (1 - t/T)*x1
    y = y1 + (y2-y1)*t/T = y2*t/T + (1 - t/T)*y1

    Es wid also einfach t -> t/T substituiert.

    [edit2] Noch eine Anmerkung zum programmiertechnischen: im ersten Fall mit t von 0 bis 1 wäre das Ziel erreicht, wenn t=1 ist. Im zweiten Fall ist das Ziel natürlich erreicht, wenn t=T ist.

    [edit3] Mein Physiklehrer würde mich nicht hassen, wenn ich das nicht schriebe:
    Wenn übrigens in dienem Spiel auch \"oben\" heißen soll (du also eine Sicht hast wie bei den alten Jump\'n Runs, Super Mario etc. und nicht wie bei Sim City z.B. also von oben draufschaust), dann wäre die Flugbahn einer Parabel deutlich realistischer, vor allem, wenn die Bewegung so langsam ist, dass sich eine Animation lohnt. ;) Wenn du wilt, kann ich dir dazu auch ein paar schöne Formeln aufschreiben ;)

    Beitrag geändert: 19.6.2008 14:29:50 von merovius
  6. Autor dieses Themas

    lol4me

    lol4me hat kostenlosen Webspace.

    Danke. Mal schauen ob ich damit was hinbekomme.

  7. also ich würde einfach die Steigung der Geraden ausrechnen und dann mein Objekt immer 1 Pixel in x-Richtung verschieben (und dabei eben immer y-Wert anpassen, kannst dir ja ausrechnen welcher y Wert dann zu x+1 passen würde....also, an den nähsten Wert anpassen, wenn du z.B bei y von 3,7 bist eben das 4te Pixel nehmen)

    Geschwindigkeit kannst du ja dann darüber steuern, wie schnell du in x-Richtung gehst

  8. m******s


    also ich würde einfach die Steigung der Geraden ausrechnen und dann mein Objekt immer 1 Pixel in x-Richtung verschieben (und dabei eben immer y-Wert anpassen, kannst dir ja ausrechnen welcher y Wert dann zu x+1 passen würde....also, an den nähsten Wert anpassen, wenn du z.B bei y von 3,7 bist eben das 4te Pixel nehmen)

    Geschwindigkeit kannst du ja dann darüber steuern, wie schnell du in x-Richtung gehst


    1.) Bekommst du damit ne uneinheitliche Geschossgeschwindigkeit (ein Schuss steil nach oben fliegt schneller als einer, der weniger steil fliegt)
    2.) Bekommst du Probleme, das Pixel ganzzahlig sein müssen, also kommt der Körper eventuell von seiner Bahn ab, wenn die Steigung rational ist
    3.) Wird im endeffekt genau das mit meiner Formel gemacht, nur dass die Korrdinaten dabei so verändert werden, dass es die Probleme 1 und 2 nicht gibt.

  9. 2.) Bekommst du Probleme, das Pixel ganzzahlig sein müssen, also kommt der Körper eventuell von seiner Bahn ab, wenn die Steigung rational ist


    Das stimmt zwar, da die x- und y- Koordinaten aber ganze Zahlen sind, lässt sich die Steigung immer als Bruch darstellen (außer wenn x1=x2, aber darauf komme ich gleich). Und diesen Bruch kannst du aufteilen in Zähler und Nenner und das ergibt dann deine jeweilige Änderung pro Zeitschritt.
    Wenn x1=x2 ist, tritt der Fall ein, dass die Gerade senkrecht nach oben verläuft, und diesen Fall kann man leicht extra betrachten.


    1.) Bekommst du damit ne uneinheitliche Geschossgeschwindigkeit (ein Schuss steil nach oben fliegt schneller als einer, der weniger steil fliegt)


    Auch das ist richtig, ließe sich aber leicht über das Verhältnis Zähler->Nenner der Steigung ausgleichen. Man wählt einfach eine entsprechende Proportionalität (oder, wenn man Zähler und Nenner vertauscht, etwas umgekehrt proportionales).

    Bin aber trotzdem eher für deine Variante, da diese den gleichen Rechenaufwand hat, aber ein paar Probleme einfacher löst.


    Beitrag geändert: 20.6.2008 8:28:35 von alphara
  10. m******s


    Das stimmt zwar, da die x- und y- Koordinaten aber ganze Zahlen sind, lässt sich die Steigung immer als Bruch darstellen (außer wenn x1=x2, aber darauf komme ich gleich). Und diesen Bruch kannst du aufteilen in Zähler und Nenner und das ergibt dann deine jeweilige Änderung pro Zeitschritt.
    Wenn x1=x2 ist, tritt der Fall ein, dass die Gerade senkrecht nach oben verläuft, und diesen Fall kann man leicht extra betrachten.


    Beispiel: Steigung 3/4. Würde bedeuten, pro \"Zeitschritt\" 3 Pixel nach oben und vier nach rechts. Wenn aber nun der Zeitschritt nur halb so groß wäre? Direkt über die Steigung zu rechnen bringt zwar den Vorteil, dass es prinzipiell einfacher zu rechnen ist, aber es zwingt dich zu bestimmten Zeitschritten, die du einhalten musst, damit du keine Probleme bekommst, dass die Bahn wegwandert. Im Extremfall, z.B. bei einer Stigung von 7/3 sind Zhäler und Nenner Teilerfremd, dann hast du keine andere Wahl, als nur zwei Schritte zu nehmen, Anfang und Ende der Bahn, und da kann man kaum mehr von Animation sprechen.


    Auch das ist richtig, ließe sich aber leicht über das Verhältnis Zähler->Nenner der Steigung ausgleichen. Man wählt einfach eine entsprechende Proportionalität (oder, wenn man Zähler und Nenner vertauscht, etwas umgekehrt proportionales).


    Damit solltest du ziemlich exakt auf meine Formeln kommen ;)


    IMHO liegt der Vorteil von meinen Formeln vor allem darin, dass man mit geringem Aufwand eine Animation hinbekommt, deren Geschwindigkeit vollkommen unabhängig von der Framerate ist. Weiterhin benutzt man hier nicht zur Umrechnung jeweils Zeitabstände zwischen den einzelnen Schleifendurchläufen, sondern eine dauernd tickende Hintergrundzeit, die in einem Spiel sowieo bereits existieren sollte und die eine weitaus \"natürlichere\" Rechnung darstellt.

    Aber so oder so, ich schätze mal, dass lol4me das eh schon irgendwie eingebaut hat oder so ;)



  11. Beispiel: Steigung 3/4. Würde bedeuten, pro \"Zeitschritt\" 3 Pixel nach oben und vier nach rechts. Wenn aber nun der Zeitschritt nur halb so groß wäre? Direkt über die Steigung zu rechnen bringt zwar den Vorteil, dass es prinzipiell einfacher zu rechnen ist, aber es zwingt dich zu bestimmten Zeitschritten, die du einhalten musst, damit du keine Probleme bekommst, dass die Bahn wegwandert. Im Extremfall, z.B. bei einer Stigung von 7/3 sind Zhäler und Nenner Teilerfremd, dann hast du keine andere Wahl, als nur zwei Schritte zu nehmen, Anfang und Ende der Bahn, und da kann man kaum mehr von Animation sprechen.





    ähm....irgendwie habt ihrs nicht kapiert ...da ist doch kein Problem
    Steigung 3/4 heisst 3 Pixel nach oben 4 nach rechts genau...
    aber ich sagte doch immer nur 1 Pixel in x-Richtung!!!
    würde heissen, 1 Pixel nach Rechts, 3/4 Pixel nach oben...
    und ja die 3/4 nach oben musst du dann wohl auf 4 Runden, das ist aber bei deiner Lösung auch nicht anders weil du bekommst ja auch Kommazahlen für Werte und man kann eben nur auf ganzen Pixeln darstellen...
    aber deswegen bleibt die Bahn ja gleich....weil man wäre ja plöde würde man vom gerundeten Wert ausgehen für die Berechnung vom nächsten Punkt....man geht einfach wieder vom Anfang aus
    also jetz dann 2 Pixel in x-Richtung 3/2 in y-Richtung und muss dann eben wieder y Wert Runden


    also wie gesagt die Bahn bleibt gleich und aufrunden von Kommazahlen auf ganze Pixel muss man ja bei deiner Lsg auch




  12. m******s


    aber deswegen bleibt die Bahn ja gleich....weil man wäre ja plöde würde man vom gerundeten Wert ausgehen für die Berechnung vom nächsten Punkt....man geht einfach wieder vom Anfang aus
    also jetz dann 2 Pixel in x-Richtung 3/2 in y-Richtung und muss dann eben wieder y Wert Runden


    Jupp, aber dann bliebe noch Problem 1. Und wenn du dafür jetzt den Scaling-Faktor einschiebst, der vorgeschlagen wurde, dann kommst du genau auf meine Formeln, oder zumindest etwas, was ich dir in einem Schritt oder so zu meiner Formel machen kann.
    Meine Formel darf IMHO immer noch den Vorteil der Einfacheit verbunden mit größtmöglicher Präzision, Natürlichkeit und - vor allem - bestmöglicher Abbildung der Realität.
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!