 	return CGPointEqualToPoint(left, right)
 }
 
+func += (inout left: CGPoint, right: CGPoint) {
+	left = left + right
+}
+
+func -= (inout left: CGPoint, right: CGPoint) {
+	left = left - right
+}
+
+func *= (inout left: CGPoint, right: CGFloat) {
+	left = left * right
+}
+
+func /= (inout left: CGPoint, right: CGFloat) {
+	left = left / right
+}
+
 extension CGAffineTransform {
 	var inverse: CGAffineTransform {
 		return CGAffineTransformInvert(self)


extension CGPoint {
	var description: String {
		return "(\(self.x), \(self.y))"
	}
	
	var length: CGFloat {
		return sqrt(self.squareLength)
	}
	
	var squareLength: CGFloat {
		return sqrt(self.squareLength)
	}
	
	var unit: CGPoint {
		return self * (1.0 / self.length)
	}
	
	var phase: CGFloat {
		return atan2(self.y, self.x)
	}
	
	func distanceFrom(point: CGPoint) -> CGFloat {

	}
	
	func nearlyEqualTo(transform: CGAffineTransform, epsilon: CGFloat) -> Bool {
		return fabs(a - transform.a) < epsilon && fabs(b - transform.b) < epsilon && fabs(c - transform.c) < epsilon && fabs(d - transform.d) < epsilon && fabs(tx - transform.tx) < epsilon && fabs(ty - transform.ty) < epsilon
	}
}

