mdsim/linalg.nim

51 lines
973 B
Nim

import math
import strformat
type
Vector* = object
x*: float
y*: float
z*: float
func vector*(x, y, z: float): Vector =
Vector(x: x, y: y, z: z)
func vector0*: Vector =
vector(0.0, 0.0, 0.0)
func `+`*(a, b: Vector): Vector =
Vector(x: a.x + b.x, y: a.y + b.y, z: a.z + b.z)
func `-`*(a: Vector): Vector =
Vector(x: -a.x, y: -a.y, z: -a.z)
func `-`*(a, b: Vector): Vector =
a + (-b)
func `*`*(a: Vector, f: float): Vector =
Vector(x: a.x * f, y: a.y * f, z: a.z * f)
func `*`*(f: float, a: Vector): Vector =
a * f
func dot*(a, b: Vector): float =
a.x * b.x + a.y * b.y + a.z * b.z
func len*(a: Vector): float =
sqrt(dot(a, a))
func `/`*(a: Vector, f: float): Vector =
a * (1/f)
func normalize*(a: Vector): Vector =
a / a.len
func `+=`*(a: var Vector, b: Vector) =
a = a + b
func `-=`*(a: var Vector, b: Vector) =
a = a - b
func `$`*(a: Vector): string =
&"{a.x} {a.y} {a.z}"