47 lines
1.0 KiB
Go
47 lines
1.0 KiB
Go
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, 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}}
|
|
|
|
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)
|
|
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)
|
|
|
|
fmt.Printf(" Pos: %d x %d x %d\n", user.x, user.y, user.z)
|
|
time.Sleep((1 * time.Second))
|
|
}
|
|
|
|
}
|