mdsim/linalg.nim

47 lines
845 B
Nim
Raw Normal View History

2022-12-07 18:51:22 +01:00
import math
import strformat
type
Vector* = object
x*: float
y*: float
func vector*(x, y: float): Vector =
Vector(x: x, y: y)
func `+`*(a, b: Vector): Vector =
Vector(x: a.x + b.x, y: a.y + b.y)
func `-`*(a: Vector): Vector =
Vector(x: -a.x, y: -a.y)
func `-`*(a, b: Vector): Vector =
a + (-b)
func `*`*(a: Vector, f: float): Vector =
Vector(x: a.x * f, y: a.y * f)
func `*`*(f: float, a: Vector): Vector =
a * f
func dot*(a, b: Vector): float =
a.x * b.x + a.y * b.y
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}]"