v2 / examples / pendulum-simulation / modules / sim / vec.v
51 lines · 43 sloc · 862 bytes · 1a35a783f1e4e8ce6eda182354af83763633caed
Raw
1module sim
2
3import math
4
5// Vector3D is a 3D vector
6pub struct Vector3D {
7pub:
8 x f64
9 y f64
10 z f64
11}
12
13// vector creates a Vector3D passing x,y,z as parameters
14pub fn vector(data Vector3D) Vector3D {
15 return Vector3D{
16 ...data
17 }
18}
19
20// addition
21pub fn (v Vector3D) + (v2 Vector3D) Vector3D {
22 return Vector3D{
23 x: v.x + v2.x
24 y: v.y + v2.y
25 z: v.z + v2.z
26 }
27}
28
29// dot product
30pub fn (v Vector3D) * (v2 Vector3D) f64 {
31 return (v.x * v2.x) + (v.y * v2.y) + (v.z * v2.z)
32}
33
34// scale gets a scaled vector
35pub fn (v Vector3D) scale(scalar f64) Vector3D {
36 return Vector3D{
37 x: v.x * scalar
38 y: v.y * scalar
39 z: v.z * scalar
40 }
41}
42
43// norm_squared returns the square of the norm of the vector
44pub fn (v Vector3D) norm_squared() f64 {
45 return v * v
46}
47
48// norm returns the norm of the vector
49pub fn (v Vector3D) norm() f64 {
50 return math.sqrt(v.norm_squared())
51}
52