Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Kugel soll am Rechteck abprallen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.11.2013, 20:48 Uhr
~Peter
Gast


Hallo,
ich hoffe das ich hier richtig bin und mir jemand weiter helfen kann. Ich habe in C++ ein Rechteck gezeichnet, was so groß ist wie mein Bildschirm. Darin lasse ich nun einen Kreis wandern. Immer wenn der Kreis gegen die Wand stößt, kehr es die richtung um. So wandert der Kreis dann kreuz und quer über mein Bildschirm. Das funktioniert auch soweit.
ich habe es so gemacht, dass ich einen startpunkt des kreises habe und da immer ein dx und dy draufrechne und neu zeichne. An den rändern habe ich dann abgefragt, ob der Standort der Kugel in x kleiner gleich 0, bzw. größer gleich der Bildschirm ist. Das selbe mit y. Jedesmal wenn die bedingung erfüllt war, habe ihc das dx (dy) negiert. So stößt sich die Kugel bei mir von den wänden ab.
Nun möchte ich im Inneren noch ein REchteck setzten, dort soll der Kreis ebenfalls dann abprallen.
Ich kann da ja nicht nach den koordinaten abfragen, da der strich ja nicht über den ganzen bildschirm geht. (Ich muss also irgendwie fragen, ob der Kreis bei x und y durch die Kannte des Rechteckes geht)
Da komme ich nicht mehr weiter. Ich habe es zunächst mit einem einfachen Strich versucht, doch auch wusste ich nicht weiter. Weis jemand wie ich da weiter machen kann?

gruß
Peter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.11.2013, 11:00 Uhr
hilefoks



Moin,

ich muss zunächst sagen, das ich mich mit der Kollisionserkennung auch noch nie wirklich befasst habe. Also im Zweifel erzähle ich Blödsinn! ;-)

Zunächst würde ich Überprüfung ob sich die Koordinaten im horizontalen und im vertikalem Bereich überschneiden. Nur dann kann es überhaupt eine Kollision geben.

Beispiel: Objekt a befindet sich horizontal im Bereich 50-150, Objekt b im Bereich 100-200. Im vertikalem befindet sich Objekt a im Bereich 600-700, Objekt b im Bereich 50-150. Hier kann es keine Kollision geben.

Erst wenn sich beide Objekte in beiden Ebenen (oder allen drei Ebenen im 3D) überschneiden, gibt es auch potentiell eine Kollision.

Jetzt musst du natürlich noch bestimmen, ob wirklich eine Kollision vorliegt. Dazu würde ich von beiden Objekten den Mittelpunkt und den Radius zur Kante (in Richtung des anderen Objekts) bestimmte und damit die Distanz der Objekte berechnen. Ist die <= 0, gibt es wirklich eine Kollision. Allerdings klappt das auch nur, wenn es keine komplexen Polygone sind.

Wie gesagt, ich bin Laie. Aber ich hoffe meine Antwort hilft dir trotzdem irgendwie einen Schritt weiter.

MfG,
Hilefoks
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.11.2013, 17:40 Uhr
Hans
Library Walker
(Operator)


Hi,

das Stichwort für Dein Problem lautet Kollisionserkennung, wie mein Vorschreiber schon richtig geschrieben hat. Ich hab das einfach mal bei Yahoo eingegeben, und 2 Ergebnisse hierher kopiert, die mir beim überfliegen brauchbar erschienen:
http://cg.cs.uni-bonn.de/de/lehre/test-seite/ss-2002/seminar-kollisionserkennung/
www.spieleprogrammierer.de/wiki/2D-Kollisionserkennung

Ansonsten ist es immer ganz praktisch, wenn man sich das Problem auch mal auf einem Blatt Papier aufzeichnet. Das grosse Rechteck, das den Bildschirmrand darstellt und ein kleines irgendwo darin, welches das Hindernis für die Kugel darstellt. Das grosse Rechteck versiehst Du am Rand mit Koordinatenskalen und lässt dann Deinen Kreis über das Papier wandern und guckt, wann, d.h. bei welchen Koordinaten er mit dem Hindernis kollidiert. Das könnte etwa so aussehen:

Code:
    1        100       200       300       400
200+---------+---------+---------+---------+200
   |                                       |
   |                                       |
   |                                       |
   |                                       |
150+                                       +150
   |                                       |
   |                +---+                  |
   |                |   |                  |
   |                +---+                  |
100+                                       +100
   |                                       |
   |                                       |
   |                        O              |
   |                                       |
_50+                                       + 50
   |                                       |
   |                                       |
   |                                       |
   |                                       |
  0+---------+---------+---------+---------+
    1        100       200       300       400


Das O darin soll den Kreis darstellen, der durch die Gegend wandert, und der Rest müsste so klar sein...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 08.11.2013 um 17:41 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.11.2013, 22:17 Uhr
~Peter
Gast


hallo
erst einmal danke für die Hinweise, werde die erstmal nachgehen und meine nerven weiter provozieren.
gruß Peter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: