-
Notifications
You must be signed in to change notification settings - Fork 0
/
physics.c
51 lines (42 loc) · 1.14 KB
/
physics.c
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
#include "physics.h"
#include <math.h>
void calculateGravForce(particle_t *p1, double massCenterX, double massCenterY, float m, int sideUPDOWN, int sideLEFTRIGHT){
double gravForceMag;
double forceDirectionX;
double forceDirectionY;
double invDist;
switch(sideUPDOWN) {
case(UP):
massCenterY = massCenterY + 1;
break;
case(DOWN):
massCenterY = massCenterY - 1;
break;
default:
break;
}
switch(sideLEFTRIGHT) {
case(LEFT):
massCenterX = massCenterX - 1;
break;
case(RIGHT):
massCenterX = massCenterX + 1;
break;
default:
break;
}
//massCenterX = massCenterX + sideUPDOWN;
//massCenterY = massCenterY + sideLEFTRIGHT;
forceDirectionX = massCenterX - p1 -> positionX;
forceDirectionY = massCenterY - p1 -> positionY;
double distance = vectorNorm(forceDirectionX, forceDirectionY);
if(distance < EPSLON)
return;
else{
invDist = 1.0/distance;
gravForceMag = (p1 -> m * m * G) * invDist * invDist;
p1 -> appliedForceX += gravForceMag * forceDirectionX * invDist;
p1 -> appliedForceY += gravForceMag * forceDirectionY * invDist;
}
return;
}