-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstellarobject.py
More file actions
32 lines (27 loc) · 1.36 KB
/
stellarobject.py
File metadata and controls
32 lines (27 loc) · 1.36 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
import util
G = 6.67430E-11
class StellarObject:
def __init__(self, mass : float, position : list, velocity : list, name = None):
self.name = name
self.mass = mass
self.position = position
self.pastPositions = [position]
self.velocity = velocity
self.pastVelocities = [velocity]
self.acceleration = util.zeroVec(len(position))
self.force = util.zeroVec(len(position))
def step(self, dt, objects : list):
for obj in objects:
if obj != self:
self.force = util.addVec(self.force, self.calculate_force(obj))
self.acceleration = util.multiplyVec(self.force, 1/self.mass)
self.velocity = util.addVec(self.velocity, util.multiplyVec(self.acceleration, dt)) # Correctly update velocity
self.position = util.addVec(self.position, util.multiplyVec(self.velocity, dt))
self.pastPositions.append(self.position)
self.pastVelocities.append(self.velocity)
self.force = util.zeroVec(len(self.position))
def calculate_force(self, obj : 'StellarObject'):
distance = util.calcDistance(self.position, obj.position)
forceTotal = G*self.mass*obj.mass/(distance**2)
force = util.multiplyVec(util.normalizeVec(util.subVec(obj.position, self.position)), forceTotal)
return force