Meine Rakete trifft dieses Trägheitsobjekt, wie in handleCollision
definiert. Ich gebe eine Rakete mit einem .r
Wert für ihr Theta und .power
für ihre Größe.Inelastische Kollision nur bewegliches Objekt nach rechts
Ich bin zu wollen meine .rotation
& .magnitude
nach einem unelastischen Kollision zu aktualisieren, wie durch Wikipedia
definiert Wenn von links kollidiert, meine Trägheit bewegt sich nach rechts.
Aber wenn von rechts kollidiert es Fehler und bewegt sich genau 180 Grad aus. Wenn also die Rakete in einem Winkel von 45 Grad zum Trägheitsobjekt steht, bewegt sich das Objekt in einem Winkel von 45 Grad nach rechts.
Was fehlt mir hier? Ich dachte, es könnte ein Problem mit der Atan-Funktion sein, so konvertierte ich durch die y-Komponente & X-Komponente des Vektors zu Radianten zuerst, das gleiche Problem.
handleCollision(rocket) {
var angle = rocket.r * Math.PI/180.0;
var rr = this.rotation * Math.PI/180;
var rocketVector = {'x' : r.power * Math.cos(angle), 'y' : r.power * Math.sin(angle)};
var inertiaVector = {'x' : this.magnitude * Math.cos(rr), 'y' : this.magnitude * Math.sin(rr)};
var rMass = 10;
var shipMass = 10;
var x = (rMass * rocketVector.x) + (shipMass * inertiaVector.x);
var y = (rMass * rocketVector.y) + (shipMass * inertiaVector.y);
var xDividedByMass = x/(rMass + shipMass);
var yDividedByMass = y/(rMass + shipMass);
var yRadians = (yDividedByMass * Math.PI/180);
var xRadians = (xDividedByMass * Math.PI/180);
var theta = Math.atan(yRadians/xRadians);
theta = theta * 180/Math.PI;
console.log(theta);
var hypotenuse = Math.sqrt((xDividedByMass * xDividedByMass) + (yDividedByMass * yDividedByMass));
this.magnitude = hypotenuse;
this.rotation = theta;
if (this.rotation < 0) {
this.rotation += 360;
} else if (this.rotation > 360) {
this.rotation -= 360;
}
}
Es ist kein Problem mit dem Radiant im Arctan. Wenn Sie y/x machen, heben sich die Pi/180 sowieso auf. Außerdem sind dies Geschwindigkeitskomponenten, keine Winkel. –
Danke, ich versuche zu folgen http://www.dummies.com/how-to/content/how-to-find-a-vectors-magnitude-and-direction.html – quantumpotato
Oh, Ihre Antwort ist da. Sie wollten 180 zu Ihrem Vektor hinzufügen, nicht 360. Arctan hat einen eingeschränkten Bereich, und Tangens hat eine Periode von 180, also müssen Sie Logik verwenden, um den Winkel basierend auf dem Bereich zu bestimmen, in dem Sie wissen, dass er sein muss. –