LoginSignup
4
2

More than 5 years have passed since last update.

CGPointで四則演算

Last updated at Posted at 2017-09-13

CGPointで四則演算させたい

C++なら演算子のオーバーロードあるのに......Swiftにもあるやん
ということを昨日知った情弱なのでextensionに付け足しました
誰かやってそうだけどバシっとしたのヒットしなかった

やれること

こういうことができるようになります
値とCGPointの計算ルールはまぁextensionに書いてる通りです


//準備
let p1 = CGPoint(x:2, y:3)
let p2 = CGPoint(x:5, y:7)
let v1:CGFloat = 11
let v2:CGFloat = 13


// CGPoint同士で四則演算
p1 + p2 //{x:7, y:10}
p1 - p2 //{x:-3, y:-4}
p1 * p2 //{x:10, y:21}
p1 / p2 //{x:0.4, y:0.429}

// 値とCGPointで四則演算
p1 + v1 //{x:13, y:14}
p2 - v2 //{x:-8, y:-6}
p1 * v1 //{x:22, y:33}
p2 / v2 //{x:0.385, y:0.538}

//CGPointと値で四則演算
v1 + p1 //{x:13, y:14}
v2 - p2 //{x:8, y:6}
v1 * p1 //{x:22, y:33}
v2 / p2 //{x:2.6, y:1.857}

extension

extension CGPoint{
  static func + (left: CGPoint, right: CGPoint) -> CGPoint {
    let x = left.x + right.x
    let y = left.y + right.y
    return CGPoint(x:x, y:y)
  }
  static func + (left: CGPoint, right: CGFloat) -> CGPoint {
    let x = left.x + right
    let y = left.y + right
    return CGPoint(x:x, y:y)
  }
  static func + (left: CGFloat, right: CGPoint) -> CGPoint {
    let x = left + right.x
    let y = left + right.y
    return CGPoint(x:x, y:y)
  }
  static func - (left: CGPoint, right: CGPoint) -> CGPoint {
    let x = left.x - right.x
    let y = left.y - right.y
    return CGPoint(x:x, y:y)
  }
  static func - (left: CGPoint, right: CGFloat) -> CGPoint {
    let x = left.x - right
    let y = left.y - right
    return CGPoint(x:x, y:y)
  }
  static func - (left: CGFloat, right: CGPoint) -> CGPoint {
    let x = left - right.x
    let y = left - right.y
    return CGPoint(x:x, y:y)
  }
  static func * (left: CGPoint, right: CGPoint) -> CGPoint {
    let x = left.x * right.x
    let y = left.y * right.y
    return CGPoint(x:x, y:y)
  }
  static func * (left: CGPoint, right: CGFloat) -> CGPoint {
    let x = left.x * right
    let y = left.y * right
    return CGPoint(x:x, y:y)
  }
  static func * (left: CGFloat, right: CGPoint) -> CGPoint {
    let x = left * right.x
    let y = left * right.y
    return CGPoint(x:x, y:y)
  }
  static func / (left: CGPoint, right: CGPoint) -> CGPoint {
    let x = left.x / right.x
    let y = left.y / right.y
    return CGPoint(x:x, y:y)
  }
  static func / (left: CGPoint, right: CGFloat) -> CGPoint {
    let x = left.x / right
    let y = left.y / right
    return CGPoint(x:x, y:y)
  }
  static func / (left: CGFloat, right: CGPoint) -> CGPoint {
    let x = left / right.x
    let y = left / right.y
    return CGPoint(x:x, y:y)
  }
}
4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2