Kollisionsabfrage --- Die beste Lösung.



  • net schrieb:

    auf anhieb fällt mir ein: alle figuren in einer liste/array etc. speichern und wer alle kollisonstest gemacht hat fliegt raus. also figur1 testet alle, fliegt dann raus, figur2 testet nur noch mit figur3 und fleigt dann raus, figur3 braucht nichts mehr zu testen (ist als einziger in der liste)...

    Hmm. Stimmt. Danke.
    So könnts funktionieren. 1 bis 6 sind die Figuren. (Hat ja doch was mit Fakultät zu tun)

    1 2 3 4 5 6
    ============
      1 2 3 4 5
        1 2 3 4
          1 2 3
            1 2
              1
    


  • ---------------------------------------------
    Nächstes Problem:

    (Ich möchte jetzt keinen neuen Thread aufmachen. Deswegen poste ich hier rein.)

    Meine Kollisionsabfragen funktionieren schon. Die Figuren können sich rotieren.
    Dann wäre es schön, wenn sich die bounding box mitrotieren würde.
    (Ich hatte mal einen Quellcode, der das zeigte. Leider hab ich die cd nicht mehr 😮 )

    Kann mir bitte jemand ein (Code)Beispiel geben, wie man die Bounding Box rotiert und dann auf Kollision der beiden Bounding Boxen prüft?

    Danke.



  • Ich stelle hiermit die These auf, dass das sehr viel Mathematik ist und ein Codebeispiel dich nicht viel weiterbringt.
    Du musst eine der beiden Boxen so rotieren, verschieben etc, dass du die andere einfach so lassen kannst und dann prüfst, ob einer der vier Eckpunkte der rotierten (etc) Box innerhalb der anderen liegt. Wenn nicht, prüfst du, ob die Verbindunglinien zwischen den vier Punkten durch die Box gehen.



  • net schrieb:

    alle figuren in einer liste/array etc. speichern und wer alle kollisonstest gemacht hat fliegt raus.

    Rausschmeissen ist völlig unnötig. Es reicht einfach nur ein Objekt mit dem Objektem die in der Liste dahinter liegen zu testen.

    Das hat übrigens nichts mit Fakultät zu tun. Das ist eher ein halbes Quadrat, sieht man doch!

    Kollisionsabfrage zwischen konvexen Polyedern macht man immer noch, in dem man eine "separating axis" sucht.

    Bye, TGGC (Fakten)



  • TGGC schrieb:

    Kollisionsabfrage zwischen konvexen Polyedern macht man immer noch, in dem man eine "separating axis" sucht.

    Da ich auch gerade ein 2D-Spiel programmiere, interessiert mich das natürlich auch. Was ist eine "seperating axis"? Und was macht man mit konkaven Polyedern (auch wenn das wahrscheinlich selten vorkommt)?



  • Eine separating Axis teilt den Raum in zwei Halbräume, jeder der Polyeder liegt komplett in einem dieser. Somit gibt es keine Kollision. Konkave Objekte muss man in konvexe zerlegen.

    Bye, TGGC (Fakten)



  • Ah! Okay, danke!



  • TGGC schrieb:

    Eine separating Axis teilt den Raum in zwei Halbräume, jeder der Polyeder liegt komplett in einem dieser. Somit gibt es keine Kollision. Konkave Objekte muss man in konvexe zerlegen.

    Bye, TGGC (Fakten)

    😕 Kannst du mir bitte einen link zu einem Tutorial/änlichem geben? Ich habe noch nie was von "seperating Axis" und "Konkave Objekte" gehört. Das sagt mir alles nichts.



  • 2d_objekt_ihrer_wahl someObj[10]= //z.b obj1,obj2,obj3,obj4
    for(int bottom=0;bottom<10;++bottom) 
    {
       for(int i=bottom+1;i<10;++i)
       {
          teste_kollision(someObj[bottom],someObj[i]);
       }
    }
    

    ein zähler (bottom) zeigt an, wo du beim nächsten durchlauf das suchen anfängst. wenn du einmal alle kollisionen getestet hast, geht bottom 1 hoch und testet nun obj1 nicht mehr, da es schon fertig getestet ist.



  • Sag ich doch 8).

    Bye, TGGC (Fakten)


Anmelden zum Antworten