Моя ракета попадает в этот объект Инерции, как определено в handleCollision
. Я прохожу в ракете, которая имеет значение .r
для своей теты и .power
за ее величину.Неэластичное столкновение только движущегося объекта вправо
Я хотел обновить свой .rotation
& .magnitude
согласно неупругого столкновения, как это определено Wikipedia
При столкновении с левой стороны, мой инерция перемещается вправо.
Но при столкновении справа он совершает ошибки и движется ровно на 180 градусов. Поэтому, если ракета поднята и направо под углом 45 градусов от объекта инерции, объект будет двигаться вверх и вправо под углом 45 градусов.
Что мне здесь не хватает? Я думал, что это может быть проблемой для функции atan, поэтому я преобразовал компонент y компонент & x в вектор для радианов первой, той же самой проблемы.
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;
}
}
Это не проблема с радианами в арктане. Когда вы делаете y/x, pi/180 отменят в любом случае. Кроме того, это компоненты скорости, а не углы. –
Спасибо, я пытаюсь следовать http://www.dummies.com/how-to/content/how-to-find-a-vectors-magnitude-and-direction.html – quantumpotato
О, ваш ответ есть. Вы хотели добавить 180 к вашему вектору, а не 360. Arctan имеет ограниченный диапазон, а тангенс имеет период 180, поэтому вам нужно использовать логику, чтобы определить угол, основанный на диапазоне, в котором вы знаете, что он должен быть. –