From 3e1a1fc9b601f2b9d3aa90e6e3c81b29f848d3a1 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Thu, 29 Oct 2015 07:51:07 -0700 Subject: [PATCH] [Math] Vertex4 --- Math/Math/Matrices.swift | 93 +++++++++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 26 deletions(-) diff --git a/Math/Math/Matrices.swift b/Math/Math/Matrices.swift index d3a673d..04faa0a 100644 --- a/Math/Math/Matrices.swift +++ b/Math/Math/Matrices.swift @@ -90,32 +90,6 @@ struct Matrix3 { // MARK: Vectors -public struct Vector4 { - static func size() -> Int { - return 4 - } - - public private(set) var data: [T] - - init() { - self.init(x: T(0), y: T(0), z: T(0), w: T(0)) - } - - init(x: T, y: T, z: T, w: T = T(1)) { - data = [x, y, z, w] - } - - subscript(idx: Int) -> T { - get { - return data[idx] - } - set(value) { - data[idx] = value - } - } -} - - public struct Vector3: Vector { private var data: [Float] @@ -149,6 +123,73 @@ public struct Vector3: Vector { data[idx] = value } } + + // MARK: Element access + + var x: Float { + return data[0] + } + + var y: Float { + return data[1] + } + + var z: Float { + return data[2] + } +} + +public struct Vector4: Vector { + private var data: [Float] + + init() { + self.init(x: 0.0, y: 0.0, z: 0.0) + } + + init(x: Float, y: Float, z: Float, w: Float = 1.0) { + data = [x, y, z, w] + } + + var length: Float { + return sqrtf(length2) + } + + var length2: Float { + return data.reduce(0.0) { $0 + $1 * $1 } + } + + // MARK: SequenceType-ish + + var count: Int { + return data.count + } + + public subscript(idx: Int) -> Float { + get { + return data[idx] + } + set(value) { + data[idx] = value + } + } + + // MARK: Element access + + var x: Float { + return data[0] + } + + var y: Float { + return data[1] + } + + var z: Float { + return data[2] + } + + var w: Float { + return data[3] + } } // MARK: - Matrix-Scalar Multiplication