diff --git a/1axis.go b/1axis.go new file mode 100644 index 0000000..0626305 --- /dev/null +++ b/1axis.go @@ -0,0 +1,55 @@ +package main + +import ( + "fmt" + "time" +) + +// Calculate the velocity (force/mass) +func calcVelocity(m int64, f int64) float64 { + + //fmt.Println(float64(f) / float64(m)) + + acceleration := float64(f) / float64(m) + return acceleration +} + +func main() { + + // Block center (in mm) + var x int64 + var y int64 + var z int64 + + // Velocity (mm/s) + var v float64 + + // Block mass (in kg) + var mass int64 + + // Force (Newton) + //var force int + + // Initialize values + x = 0 + y = 0 + z = 0 + v = 0 + mass = 24 + //force = 10 + + // Array of force applied + force := []int{0, -1, -1, -2, -1, -1, 0, 0, 0, 0, 0} + + for i, f := range force { + + fmt.Printf("Gonna divide %d by %d\n", f, mass) + v = v + calcVelocity(mass, int64(f)) + fmt.Printf("Frame %d: velocity: %f (m/s)\n", i, v) + x = x + int64(v*1000) + fmt.Printf(" Pos: %d x %d x %d\n", x, y, z) + time.Sleep(1 * time.Second) + + } + +} diff --git a/2axis.go b/2axis.go new file mode 100644 index 0000000..726dae0 --- /dev/null +++ b/2axis.go @@ -0,0 +1,46 @@ +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)) + } + +} diff --git a/3axis.go b/3axis.go new file mode 100644 index 0000000..4e1c6b3 --- /dev/null +++ b/3axis.go @@ -0,0 +1,51 @@ +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)) + } + +} diff --git a/old_go_mod b/old_go_mod new file mode 100644 index 0000000..1ed1fb7 --- /dev/null +++ b/old_go_mod @@ -0,0 +1,3 @@ +module git.sr.ht/~ligthert/Massdriver + +go 1.19