CGPointVector

0.4.1

Makes it easy to use CGPoint as vectors in Swift
koher/CGPointVector

What's New

Avoid overflow and underflow of `length` and `distance`

2020-05-04T16:26:09Z
  • Replace x * x + y * y with hypot(x, y) (9feb2ea)
    • This prevents overflow and underflow during calculating length and distance. It makes it possible to pass the following tests.
XCTAssertEqual(CGPoint(x: .greatestFiniteMagnitude, y: 0.0).length, .greatestFiniteMagnitude)
XCTAssertEqual(CGPoint(x: 0.0, y: .leastNonzeroMagnitude).length, .leastNonzeroMagnitude)

CGPointVector

Build Status

CGPointVector provides the extension for arithmetic operations with CGPoint in Swift, which are convenient when CGPoint values are used as vectors.

let a = CGPoint(x: 1, y: 2), b = CGPoint(x: -3, y: 5)

let sum = a + b // (-2.0, 7.0)
let distance = (b - a).length // 5.0
let direction = (b - a).unit // (-0.8, 0.6)
let rotated = a * CGAffineTransform(rotationAngle: CGFloat.pi / 2) // (-2.0, 1.0)

Usage

import CGPointVector

let a = CGPoint(x: 3.0, y: -4.0)
let b = CGPoint(x: 2.0, y: -5.0)

let sum = a + b // (5.0, -9.0)
let length = a.length // 5.0
let distance = a.distance(from: b) // 1.4142135623731
let unitVector = a.unit // (0.6, -0.8)
let dotProduct = a.dot(b) // 26.0
let angle = a.angle(from: b) // 0.26299473168091936

License

The MIT License

Description

  • Swift Tools 5.0.0
View More Packages from this Author

Dependencies

  • None
Last updated: Thu Mar 14 2024 06:00:13 GMT-0900 (Hawaii-Aleutian Daylight Time)