-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcollision.js
More file actions
71 lines (64 loc) · 1.73 KB
/
collision.js
File metadata and controls
71 lines (64 loc) · 1.73 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
var ballA = {
x: 100,
y: 1,
z: 10,
vx: 0,
vy: 1,
vz: 1,
r: 3
}
var ballB = {
x: 0,
y: 1,
z: 100,
vx: 1,
vy: 1,
vz: 0,
r: 1
}
var distance
var distanceOld
function isWithinLimit(ballA, ballB) {
return !(ballA.x === 10000 || ballA.y === 10000 || ballA.z === 10000) &&
!(ballB.x === 10000 || ballB.y === 10000 || ballB.z === 10000);
}
function calculateDistance(ballA, ballB) {
var dx = ballA.x - ballB.x;
var dy = ballA.y - ballB.y;
var dz = ballA.z - ballB.z;
return Math.sqrt(dx * dx + dy * dy + dz * dz);
}
function isCollision(distance) {
const ABradii = ballA.r + ballB.r
return parseFloat(ABradii) > distance ? true : false;
}
function throwBalls(ballA, ballB) {
previousDistance = calculateDistance(ballA, ballB)
while (isWithinLimit(ballA, ballB)) {
if (isCollision(calculateDistance(ballA, ballB))) {
console.log("YES")
console.log(ballA.x + " " + ballA.y + " " + ballA.z)
break
} else {
//if there's no collision proceed to next frame
ballA.x = ballA.x + ballA.vx
ballA.y = ballA.y + ballA.vy
ballA.z = ballA.z + ballA.vz
ballB.x = ballB.x + ballB.vx
ballB.y = ballB.y + ballB.vy
ballB.z = ballB.z + ballB.vz
distance = calculateDistance(ballA, ballB);
if (distance < previousDistance) {
} else {
console.log("NO")
console.log(distance.toFixed(5))
break
}
previousDistance = distance;
}
}
}
function output() {
console.log(isCollision(calculateDistance(ballA, ballB)))
}
throwBalls(ballA, ballB)