Ich habe eine Kugel (ein dynamischer Körper in der Form eines Kreises), die auf einer Oberfläche (Trampolin) unter den Bedingungen einer Schwerkraft wirkt.berechnen box2d Impuls für einen bestimmten Aufprallwinkel
Wenn der Ball auf das Trampolin (im Bild von Punkt A nach B) fällt, möchte ich einen Impuls (normal zur Trampolinoberfläche) auf den Ball ausüben.
Das Problem besteht darin, dass im Augenblick i verwenden:
b2Vec2 impulse = b2Vec2(0, [self fullMass]*[GameMaster sharedInstance].usrTrampolineForce);
b2Vec2 impulsePoint = _body->GetWorldPoint(b2Vec2(0/PTM_RATIO, -1.0/PTM_RATIO));
_body->ApplyLinearImpulse(impulse, impulsePoint);
welche die Kugel senkrecht (auf der Oberfläche) nach oben (der roten Richtung in der Zeichnung) sendet, obwohl es eine achten soll bestimmte realistische Flugbahn (gezeichnet mit Schwarz).
Wie kann ich den Impuls anwenden, um einen realistischen Sprung zu haben?
, d.h. Beachten Sie, dass ich mich für alle Fälle der Ballkreuzung interessiere. zum Beispiel könnte der Ball auf das Trampolin fallen und der Ball sollte immer noch eine korrekte Flugbahn haben.
Die realistische Flugbahn _is_ rot. Reflexion über das Normale ist richtig, IIRC. – brice
@brice Ich habe das Bild gezeichnet, um einen Punkt zu machen. Betrachtet man den Code, kann man feststellen, dass, wenn dies der richtige Fall ist, das bedeutet, dass unabhängig von der AB-Kante (dem Winkel zwischen der Kante und dem Ballrichtungsvektor) jede Interaktion zwischen dem Ball und der AB-Kante den Ball ergeben würde springe hoch, was in der realen Welt nicht stimmt. – Alex
Ich habe dich. Es ist keine feste Oberfläche, aber Sie möchten dem Ball einen aktiven Impuls geben, wenn Sie eine Kollision haben. – brice