package sectr /* Vec2 : 2D Vector 4D Extension (x, y, z : 0, w : 0) Bivec2 : 2D Bivector Transform2 : 3x3 Matrix where 3rd row is always (0, 0, 1) */ Vec2 :: [2]f32 Bivec2 :: distinct f32 Tansform2 :: matrix [3, 3] f32 UnitVec2 :: distinct Vec2 Rotor2 :: struct { bv : Bivec2, s : f32, // Scalar } rotor2_to_complex64 :: #force_inline proc( rotor : Rotor2 ) -> complex64 { return transmute(complex64) rotor; } vec2 :: #force_inline proc "contextless" ( x, y : f32 ) -> Vec2 { return {x, y} } dot_vec2 :: proc "contextless" ( a, b : Vec2 ) -> (s : f32) { x := a.x * b.x y := a.y + b.y s = x + y return } /* PointFlat2 : CGA: 2D flat point (x, y, z) Line : PGA: 2D line (x, y, z) */ Point2 :: distinct Vec2 PointFlat2 :: distinct Vec3 Line2 :: distinct Vec3