[Math] Tweakin' the Vectors a bit
- count is a static var
This commit is contained in:
parent
662e95bcca
commit
62570392b0
1 changed files with 32 additions and 31 deletions
|
@ -15,7 +15,8 @@ public protocol Vector {
|
||||||
init()
|
init()
|
||||||
|
|
||||||
/** Number of elements in the vector. */
|
/** Number of elements in the vector. */
|
||||||
var count: Int { get }
|
static var count: Int { get }
|
||||||
|
|
||||||
/** Element access by index. */
|
/** Element access by index. */
|
||||||
subscript(idx: Int) -> Float { get set }
|
subscript(idx: Int) -> Float { get set }
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ extension Vector {
|
||||||
|
|
||||||
public var length2: Float {
|
public var length2: Float {
|
||||||
var l2: Float = 0.0
|
var l2: Float = 0.0
|
||||||
for i in 0..<self.count {
|
for i in 0..<Self.count {
|
||||||
l2 += self[i] * self[i]
|
l2 += self[i] * self[i]
|
||||||
}
|
}
|
||||||
return l2
|
return l2
|
||||||
|
@ -66,8 +67,8 @@ public struct Vector3: Vector {
|
||||||
|
|
||||||
// MARK: CollectionType-ish
|
// MARK: CollectionType-ish
|
||||||
|
|
||||||
public var count: Int {
|
public static var count: Int {
|
||||||
return data.count
|
return 3
|
||||||
}
|
}
|
||||||
|
|
||||||
public subscript(idx: Int) -> Float {
|
public subscript(idx: Int) -> Float {
|
||||||
|
@ -126,8 +127,8 @@ public struct Vector4: Vector {
|
||||||
|
|
||||||
// MARK: SequenceType-ish
|
// MARK: SequenceType-ish
|
||||||
|
|
||||||
public var count: Int {
|
public static var count: Int {
|
||||||
return data.count
|
return 4
|
||||||
}
|
}
|
||||||
|
|
||||||
public subscript(idx: Int) -> Float {
|
public subscript(idx: Int) -> Float {
|
||||||
|
@ -163,7 +164,7 @@ public struct Vector4: Vector {
|
||||||
extension Vector {
|
extension Vector {
|
||||||
public func dot(rhs: Self) -> Float {
|
public func dot(rhs: Self) -> Float {
|
||||||
var sum: Float = 0.0
|
var sum: Float = 0.0
|
||||||
for i in 0..<self.count {
|
for i in 0..<Self.count {
|
||||||
sum += self[i] * rhs[i]
|
sum += self[i] * rhs[i]
|
||||||
}
|
}
|
||||||
return sum
|
return sum
|
||||||
|
@ -180,39 +181,39 @@ extension Vector3 {
|
||||||
|
|
||||||
public prefix func -<T: Vector>(v: T) -> T {
|
public prefix func -<T: Vector>(v: T) -> T {
|
||||||
var out = v
|
var out = v
|
||||||
for i in 0..<out.count {
|
for i in 0..<T.count {
|
||||||
out[i] -= -out[i]
|
out[i] -= -out[i]
|
||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
public func +=<T: Vector>(inout rhs: T, lhs: T) {
|
public func +=<T: Vector>(inout lhs: T, rhs: T) {
|
||||||
for i in 0..<rhs.count {
|
for i in 0..<T.count {
|
||||||
rhs[i] += lhs[i]
|
lhs[i] += rhs[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func +<T: Vector>(rhs: T, lhs: T) -> T {
|
public func +<T: Vector>(lhs: T, rhs: T) -> T {
|
||||||
var out = rhs
|
var out = lhs
|
||||||
out += lhs
|
out += rhs
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
public func -=<T: Vector>(inout rhs: T, lhs: T) {
|
public func -=<T: Vector>(inout lhs: T, rhs: T) {
|
||||||
for i in 0..<rhs.count {
|
for i in 0..<T.count {
|
||||||
rhs[i] -= lhs[i]
|
lhs[i] -= rhs[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func -<T: Vector>(rhs: T, lhs: T) -> T {
|
public func -<T: Vector>(lhs: T, rhs: T) -> T {
|
||||||
var out = rhs
|
var out = lhs
|
||||||
out -= lhs
|
out -= rhs
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
public func *=<T: Vector>(inout rhs: T, lhs: Float) {
|
public func *=<T: Vector>(inout lhs: T, rhs: Float) {
|
||||||
for i in 0..<rhs.count {
|
for i in 0..<T.count {
|
||||||
rhs[i] *= lhs
|
lhs[i] *= rhs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,8 +227,8 @@ public func *<T: Vector>(lhs: T, rhs: Float) -> T {
|
||||||
return rhs * lhs
|
return rhs * lhs
|
||||||
}
|
}
|
||||||
|
|
||||||
public func /=<T: Vector>(inout rhs: T, lhs: Float) {
|
public func /=<T: Vector>(inout lhs: T, rhs: Float) {
|
||||||
rhs *= (1.0 / lhs)
|
lhs *= (1.0 / rhs)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func /<T: Vector>(lhs: T, rhs: Float) -> T {
|
public func /<T: Vector>(lhs: T, rhs: Float) -> T {
|
||||||
|
@ -235,16 +236,16 @@ public func /<T: Vector>(lhs: T, rhs: Float) -> T {
|
||||||
}
|
}
|
||||||
|
|
||||||
infix operator ∙ { associativity left precedence 150 }
|
infix operator ∙ { associativity left precedence 150 }
|
||||||
public func ∙<T: Vector>(rhs: T, lhs: T) -> Float {
|
public func ∙<T: Vector>(lhs: T, rhs: T) -> Float {
|
||||||
return rhs.dot(lhs)
|
return lhs.dot(rhs)
|
||||||
}
|
}
|
||||||
|
|
||||||
infix operator ×= { associativity left precedence 150 }
|
infix operator ×= { associativity left precedence 150 }
|
||||||
public func ×=(inout rhs: Vector3, lhs: Vector3) {
|
public func ×=(inout lhs: Vector3, rhs: Vector3) {
|
||||||
rhs = rhs.cross(lhs)
|
lhs = lhs.cross(rhs)
|
||||||
}
|
}
|
||||||
|
|
||||||
infix operator × { associativity left precedence 150 }
|
infix operator × { associativity left precedence 150 }
|
||||||
public func ×(rhs: Vector3, lhs: Vector3) -> Vector3 {
|
public func ×(lhs: Vector3, rhs: Vector3) -> Vector3 {
|
||||||
return rhs.cross(lhs)
|
return lhs.cross(rhs)
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue