Skip to content

Instantly share code, notes, and snippets.

@neildanson
Created October 4, 2014 21:22
Show Gist options
  • Save neildanson/cf930ebcbce7fe98086e to your computer and use it in GitHub Desktop.
Save neildanson/cf930ebcbce7fe98086e to your computer and use it in GitHub Desktop.
package types
import "math"
type Vector struct {
X, Y, Z float64
}
func (v Vector) Dot(v1 Vector) float64 {
return (v.X * v1.X) + (v.Y * v1.Y) + (v.Z * v1.Z)
}
func (v Vector) Length() float64 {
return math.Sqrt(v.Dot(v))
}
func (v Vector) Cross(v1 Vector) Vector {
return Vector{X: v.Y*v1.Z - v.Z*v1.Y,
Y: v.Z*v1.X - v.X*v1.Z,
Z: v.X*v1.Y - v.Y*v1.X}
}
func (v Vector) Add(v1 Vector) Vector {
return Vector{X: v.X + v1.X, Y: v.Y + v1.Y, Z: v.Z + v1.Z}
}
func (v Vector) Subtract(v1 Vector) Vector {
return Vector{X: v.X - v1.X, Y: v.Y - v1.Y, Z: v.Z - v1.Z}
}
func (v Vector) Scale(s float64) Vector {
return Vector{X: v.X * s, Y: v.Y * s, Z: v.Z * s}
}
func (v Vector) Normalize() Vector {
mag := v.Length()
if mag == 0.0 {
return v.Scale(math.Inf(1))
} else {
return v.Scale(1.0 / mag)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment