3axis.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. type SpaceObj struct {
  7. x int64 // Pos x
  8. y int64 // Pos y
  9. z int64 // Pos z
  10. vx float64 // Velocity x (mm)
  11. vy float64 // Velocity y (mm)
  12. vz float64 // Velocity z (mm)
  13. m int64 // mass (kg)
  14. }
  15. type Force struct {
  16. x int64
  17. y int64
  18. z int64
  19. }
  20. func calcAcceleration(m int64, f int64) float64 {
  21. return float64(f) / float64(m)
  22. }
  23. func main() {
  24. user := SpaceObj{0, 0, 0, 0, 0, 0, 52}
  25. 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}}
  26. for i, f := range vectors {
  27. fmt.Printf("Frame: %d; Vector: %d %d %d\n", i, f.x, f.y, f.z)
  28. user.vx = user.vx + calcAcceleration(user.m, f.x)
  29. user.vy = user.vy + calcAcceleration(user.m, f.y)
  30. user.vz = user.vy + calcAcceleration(user.m, f.z)
  31. fmt.Printf(" velocity: %f %f %f (m/s)\n", user.vx, user.vy, user.vz)
  32. user.x = user.x + int64(user.vx*1000)
  33. user.y = user.y + int64(user.vy*1000)
  34. user.z = user.z + int64(user.vz*1000)
  35. fmt.Printf(" Pos: %d x %d x %d\n", user.x, user.y, user.z)
  36. time.Sleep((1 * time.Second))
  37. }
  38. }