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

Azasel

unregistriert

1

19.08.2017, 23:20

Wieso wird der Kreis beim überlappen schneller

Hallo, und zwar komme ich gerade bei einer Formel nicht ganz mit.
Wenn 2 Kreise miteinander Kollidieren und einer von den Kreisen der Spieler ist, soll der Kreis, den der Spieler steuert um den anderen Kreis (z.B. 90Grad) herum fahren, wie so ein Treppeneffekt.
Was ein Vector ist und wie man merkt, ob Kreise miteinander kollidieren habe ich allmählich Verstanden.
Was nun für mein Verständnis noch fehlt, ist die Geschwindigkeit des Abpralls.

Hier ein kleiner Ausschnitt des Codes, um das ganze noch mal zu verdeutlichen.

Javascript-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function blockCircle(c1, c2)
{  
  //Calculate the vector between the circles center points
  var vx = c1.centerX() - c2.centerX();
  var vy = c1.centerY() - c2.centerY();
  
  //Find the distance between the circles by calculating
  //the vector's magnitude (how long the vector is) 
  var magnitude = Math.sqrt(vx * vx + vy * vy);
  
  //Add together the circles' combined half-widths
  var totalRadii = c1.halfWidth() + c2.halfWidth();
  
  //Figure out if there's a collision
  if(magnitude < totalRadii)
  {
    //Yes, a collision is happening.
    //Find the amount of overlap between the circles
    //Ab hier komme ich nicht mehr ganz mit 

    var overlap = totalRadii - magnitude;
    
    //Normalize the vector.
    //These numbers tell us the direction of the collision
    dx = vx / magnitude;
    dy = vy / magnitude;

    //Move circle 1 out of the collision by multiplying
    //the overlap with the normalized vector and add it to 
    //circle 1's position
    c1.x += overlap * dx; 
    c1.y += overlap * dy;
  }
}
Ja, das Beispiel ist in Javascript, aber ich glaube es sollte trotzdem Klar sein, was die einzelnen Abschnitte machen auch wenn man kein Javascript kann und falls es noch Unklarheiten im Code gibt, fragt nach.

Also was ist jetzt die Frage?
Kann mir das bitte jemand auf eine einfache und verständliche Art erklären (, wenn es den überhaupt möglich ist, den Mathe liegt ja nicht jedem)?
Aus meiner Sicht müsste der Kreis beim Kollidieren mir KreisNr2 immer genau einen Konstanten Wert wegbewegen ?(
Vielleicht aber ist das Prinzip auch einfach so simpel, dass ich es übersehe.

Ich bedanke mich schon mal für die kommende Hilfe :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

19.08.2017, 23:59

Stellen wir doch mal die Frage andersrum: warum bist du denn der Meinung, dass der Wert mit denen sich die Kreise auseinanderbewegen konstant sein müsste?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.