Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Zadro

Frischling

Beiträge: 14

Beruf: Schüler

  • Private Nachricht senden

21

01.05.2010, 18:10

Danke :-)

-=Andreas=-

unregistriert

22

01.05.2010, 19:10

warum machst du das nicht mit kreisen? a²+b²= c²<3<3



(Link)

Uploaded with ImageShack.us

Meintest du so? :D

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

23

01.05.2010, 19:50

Nein, es ging darum, wie du Kollisionstests durchführen kannst:
Nimm die Entfernung der beiden Objekte, und schaue, ob sie kleiner ist als die Summe der Einzelradien...
Ich erstelle mal eine grafik dazu...

Also:
Du siehst, ich habe um ein Raumschiff und einen Asteoriden jeweils einen kreis mit dem Radius r_1 bzw. r_2 eingefügt... Der Asteorid hat die Position x1 und y1, das Raumschiff x2 und y2 (nicht eingezeichnet)
Die distanz ist also (Pythagoras):
d² = (x1-x2)²+(y1-y2)²

Nun muss man nur noch prüfen, ob (r1+r2)² < d².
Wenn ja, trat eine kollision auf,
Wenn nein, dann eben nicht ;)

Ich hoffe, das war verständlich ausgedrückt und nicht am Thema vorbeigeredet :D

mfg CBenni::O
»CBenni::O« hat folgende Bilder angehängt:
  • nokollision.png
  • kollision.png
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »CBenni::O« (02.05.2010, 19:32)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

24

01.05.2010, 22:07

Warum (r1+r2)^2 < d?
Wenn schon, dann (r1+r2) < d

oder aber:
(r1+r2)^2 < d^2

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

25

02.05.2010, 01:18

(r1+r2)^2 < d^2

wohl die beste möglichkeit. bei einem vergleich brauch man nur die quadrate.
das potenzieren des radius geht viel schneller als das wurzel ziehen der entfernung, besonders wenn du das quadrat speicherst.
bin ich nur müde und mach ein denkfehler oder ist es wirklich richtig den durchmesser(d) und nicht den radius zu nehmen?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

26

02.05.2010, 11:31

Die distanz ist also (Pythagoras):
d² = (x1-x2)²+(y1-y2)²

Mag mir jemand erklären, warum an da Pythagoras braucht? Ich hätte da jetzt zwei 2D-Vektoren definiert p1(x1,y1) und p2(x2,y2) wobei p1 = Raumschiff und p2= Asteroid. Danach subtrahiert man die Vektoren und berechnet die Länge des resultierenden Vektors. Das dann verglichen mit der Summe der Radien sollte das gewünschte Ergebnis liefern.

Also Vektor zwischen p1 und p2:
p1 - p2 = d

Kollision:
|d| < r1 + r2

Das ganze würde ganz ohne Quadrat funktionieren.
Sollte ich einen offensichtlichen Denkfehler machen, dann lasst es mich wissen.

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

27

02.05.2010, 11:51

Danach subtrahiert man die Vektoren und berechnet die Länge des resultierenden Vektors.

wie berechnest du denn die länge des resultierenden vektors?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlazeX

Alter Hase

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

28

02.05.2010, 11:52

Mag mir jemand erklären, warum an da Pythagoras braucht?
Hast du doch selbst gemacht:
und berechnet die Länge des resultierenden Vektors.

|v| = sqrt(v.x^2 + v.y^2)

Thoran

Alter Hase

Beiträge: 520

Wohnort: Stuttgart

Beruf: Senior Software Engineer

  • Private Nachricht senden

29

02.05.2010, 12:01

Ich muss ganz ehrlich sagen, daß ich über die Implementierung der Betragsfunktion des Vektors nicht mehr nachgedacht hab. Das ist der Nachteil, wenn man nur noch mit High-Level-Funktionen arbeitet, die Implementierung der Funktionen anderen überlässt und die HM1-3 an der Uni schon Jahre hinter sich gelassen hat. :S

Von daher Asche über mein Haupt.

Thoran
Mein Entwicklertagebuch
Aktuelles Projekt: Universum Espionage
Eingestellt:Spieleengine SilverCore
Organisator "Spieleentwickler Stammtisch Stuttgart"

-=Andreas=-

unregistriert

30

02.05.2010, 19:30

Eins ist schon mal sicher - meine Kollisionserkennung mit SDL_Rect usw. werde ich gepflegt in die Tonne kloppen. :cursing:
Über das was geschrieben wurde muss ich allerdings auch erstmal ein bisschen nachdenken.
Aber trotzdem ein großes DANKE an euch! :thumbsup:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-=Andreas=-« (02.05.2010, 19:42)


Werbeanzeige