2axis.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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, 0}, {0, 1, 0}, {-1, 0, 0}, {-1, -1, 0}, {1, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, 1, 0}, {1, 0, 0}, {0, 0, 0}, {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. fmt.Printf(" velocity: %f %f %f (m/s)\n", user.vx, user.vy, user.vz)
  31. user.x = user.x + int64(user.vx*1000)
  32. user.y = user.y + int64(user.vy*1000)
  33. fmt.Printf(" Pos: %d x %d x %d\n", user.x, user.y, user.z)
  34. time.Sleep((1 * time.Second))
  35. }
  36. }