package main import ( "fmt" "time" ) type SpaceObj struct { x int64 // Pos x y int64 // Pos y z int64 // Pos z vx float64 // Velocity x (mm) vy float64 // Velocity y (mm) vz float64 // Velocity z (mm) m int64 // mass (kg) } type Force struct { x int64 y int64 z int64 } func calcAcceleration(m int64, f int64) float64 { return float64(f) / float64(m) } func main() { user := SpaceObj{0, 0, 0, 0, 0, 0, 52} vectors := []Force{{1, 0, -1}, {0, 1, 0}, {-1, 0, 0}, {-1, -1, -1}, {1, 0, 0}, {1, 0, 0}, {0, 1, -1}, {0, 1, 0}, {1, 0, 0}, {0, 0, -1}, {0, 0, 0}} for i, f := range vectors { fmt.Printf("Frame: %d; Vector: %d %d %d\n", i, f.x, f.y, f.z) user.vx = user.vx + calcAcceleration(user.m, f.x) user.vy = user.vy + calcAcceleration(user.m, f.y) user.vz = user.vy + calcAcceleration(user.m, f.z) fmt.Printf(" velocity: %f %f %f (m/s)\n", user.vx, user.vy, user.vz) user.x = user.x + int64(user.vx*1000) user.y = user.y + int64(user.vy*1000) user.z = user.z + int64(user.vz*1000) fmt.Printf(" Pos: %d x %d x %d\n", user.x, user.y, user.z) time.Sleep((1 * time.Second)) } }