Итак, я новичок в Javascript, я стараюсь выучить его как можно быстрее, много разыскивая! Но я не могу найти какие-либо решения. Подводя итог, я пишу программу на Js, которая обнаруживает столкновения между шарами и обрабатывает их. Каждый шар имеет вектор «moveDirection», который представляет направление движения мяча, вектор положения, который сохраняет текущее положение мяча и скорость (скаляр). Все векторы имеют 3 переменные (x, y, z), и шар перемещается только в переменных x и z. Я пытаюсь справиться со столкновением между шарами в этой функции:
function reactToCollision(b1, b2) {
let pos1 = b1.position.clone();
let pos2 = b2.position.clone();
let v1 = b1.moveDirection.clone();
let v2 = b2.moveDirection.clone();
let a = (v1.sub(v2)).dot((pos1.sub(pos2)));
let b = Math.pow((pos1.sub(pos2)).length, 2);
let c = (pos1.sub(pos2)).multiplyScalar(-a / b);
b1.moveDirection.addScalar(c);
let d = (v2.sub(v1)).dot(pos2.sub(pos1));
let e = Math.pow((pos2.sub(pos1)).length, 2);
let f = (pos2.sub(pos1)).multiplyScalar(-d / e);
b2.moveDirection.addScalar(f);
b2.velocity = b1.velocity;
}
Вот где я вызываю функцию:
function moveBall(ball, deltatime) {
let ballCollided = collision(ball);
if (ballCollided != null) {
reactToCollision(ball, ballCollided);
if (findBall(ballCollided.name) == null) {
movingBalls.push(ballCollided.name);
}
}
ball.position.x += ball.moveDirection.x * ball.velocity;
ball.position.z += -ball.moveDirection.z * ball.velocity;
ball.velocity -= deltatime * friction;
}
Проблема в том, что ball. position и x position.z теперь NaN, а вектор moveDirection теперь очень странный, например:
x: "-0.23202599585056305[object Object]"
y: "0[object Object]"
z: "0.9727095907821058[object Object]"
Я был бы очень признателен за чью-то помощь и терпение, которые помогут мне решить эту проблему! Большое спасибо, если вы зашли так далеко!