Skip to content

Instantly share code, notes, and snippets.

@neildanson
Created October 4, 2014 21:00
Show Gist options
  • Save neildanson/60512fa63f87cb8b932c to your computer and use it in GitHub Desktop.
Save neildanson/60512fa63f87cb8b932c to your computer and use it in GitHub Desktop.
namespace FSharpTracer
open System
type Vector =
{ X : float
Y : float
Z : float }
member v.Dot(v1 : Vector) = (v.X * v1.X) + (v.Y * v1.Y) + (v.Z * v1.Z)
member v.Length() = sqrt (v.Dot v)
member v.Cross(v1 : 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 }
member v.Add(v2 : Vector) =
{ X = v.X + v2.X
Y = v.Y + v2.Y
Z = v.Z + v2.Z }
member v.Subtract(v2 : Vector) =
{ X = v.X - v2.X
Y = v.Y - v2.Y
Z = v.Z - v2.Z }
member v.Scale s =
{ X = v.X * s
Y = v.Y * s
Z = v.Z * s }
member v.Normalize() =
let mag = v.Length()
v.Scale(if mag = 0.0 then Double.PositiveInfinity
else 1.0 / mag)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment