Skip to content

Instantly share code, notes, and snippets.

@djames-bloom
Created April 24, 2024 21:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save djames-bloom/70dd5e0500ac005272898ae19dc4be35 to your computer and use it in GitHub Desktop.
Save djames-bloom/70dd5e0500ac005272898ae19dc4be35 to your computer and use it in GitHub Desktop.
package vmath
type Vector3 struct {
X, Y, Z float64
}
func NewVector3(x, y, z float64) Vector3 {
return Vector3{x, y, z}
}
func (v Vector3) AddScalar(s float64) Vector3 {
return Vector3{v.X + s, v.Y + s, v.Z + s}
}
func (v Vector3) AddVector(v2 Vector3) Vector3 {
return Vector3{v.X + v2.X, v.Y + v2.Y, v.Z + v2.Z}
}
func (v Vector3) SubtractScalar(s float64) Vector3 {
return Vector3{v.X - s, v.Y - s, v.Z - s}
}
func (v Vector3) SubtractVector(v2 Vector3) Vector3 {
return Vector3{v.X - v2.X, v.Y - v2.Y, v.Z - v2.Z}
}
func (v Vector3) MultiplyScalar(s float64) Vector3 {
return Vector3{v.X * s, v.Y * s, v.Z * s}
}
func (v Vector3) MultiplyVector(v2 Vector3) Vector3 {
return Vector3{v.X * v2.X, v.Y * v2.Y, v.Z * v2.Z}
}
func (v Vector3) DivideScalar(s float64) Vector3 {
return Vector3{v.X / s, v.Y / s, v.Z / s}
}
func (v Vector3) DivideVector(v2 Vector3) Vector3 {
return Vector3{v.X / v2.X, v.Y / v2.Y, v.Z / v2.Z}
}
func (v Vector3) Normalize() Vector3 {
out := v
if out.X > 89 {
out.X = 89
}
if out.X < -89 {
out.X = -89
}
for out.Y > 180 {
out.Y -= 360
}
for out.Y < -180 {
out.Y += 360
}
out.Z = 0
return out
}
func (v Vector3) Zero() bool {
return v.X == 0 && v.Y == 0 && v.Z == 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment