     return CGPoint(x:lhs.x / rhs, y:lhs.y / rhs)
 }
 
-// MARK: Arithmetic Assignment 
+// MARK: Arithmetic Assignment
 
 public func += (inout lhs:CGPoint, rhs:CGPoint) {
     lhs = lhs + rhs

public func - (lhs:CGPoint, rhs:CGPoint) -> CGPoint {
    return CGPoint(x:lhs.x - rhs.x, y:lhs.y - rhs.y)
}

// MARK: Arithmetic (with float)

public func * (lhs:CGPoint, rhs:CGPoint) -> CGPoint {
    return CGPoint(x:lhs.x * rhs.x, y:lhs.y * rhs.y)
}

public func / (lhs:CGPoint, rhs:CGPoint) -> CGPoint {
    return CGPoint(x:lhs.x / rhs.x, y:lhs.y / rhs.y)
}


// MARK: Arithmetic (with scalar)



public func /= (inout lhs:CGPoint, rhs:CGFloat) {
    lhs = lhs / rhs
}

// MARK: Arithmetic (with scalar of CGSize)

public func * (lhs:CGPoint, rhs:CGSize) -> CGPoint {
    return CGPoint(x:lhs.x * rhs.width, y:lhs.y * rhs.height)
}

public func / (lhs:CGPoint, rhs:CGSize) -> CGPoint {
    return CGPoint(x:lhs.x / rhs.width, y:lhs.y / rhs.height)
}

public func *= (inout lhs:CGPoint, rhs:CGSize) {
    lhs = lhs * rhs
}

public func /= (inout lhs:CGPoint, rhs:CGSize) {
    lhs = lhs / rhs
}

public extension CGPoint {
    var asSize : CGSize { get { return CGSize(w:x, h:y) } }
}

// MARK: dotProduct and crossProduct

public extension CGPoint {
    func dotProduct(v:CGPoint) -> CGFloat { return x * v.x + y * v.y }
    func crossProduct(v:CGPoint) -> CGFloat { return x * v.y - y * v.x }
}

public func * (lhs:CGPoint, rhs:CGPoint) -> CGFloat {
    return lhs.dotProduct(rhs)
}

public func ^ (lhs:CGPoint, rhs:CGPoint) -> CGFloat {
    return lhs.crossProduct(rhs)
}

// MARK: Misc
