VectorArithmetic 1.3.4

VectorArithmetic 1.3.4

测试已测试
语种语言 SwiftSwift
许可证 MIT
发布最后发布2016年5月
SPM支持 SPM

Seivan Heidari维护。



VectorArithmetic

概览

通过协议 VectorOperatableVectorArithmetic 扩展 CGPointCGSizeCGVector

处理与架构差异相关的某些 Swift 的 bug。

值得注意的是,Apple 本身在整个 UIKit 中使用 CGPoint 来表示速度和其他向量。所以,当您看到 myPoint + myOtherPoint * 2 时请记住这一点

依赖关系

为了在不同的数值类型之间获得更好的互操作性,请使用

使用

数学函数
let vector = CGVector(20, 5.5)
let point = CGPoint(x: 5, y: 5)

vector.angleInRadians // -1.30243011588899
vector.magnitude // 20.7424685126915
vector.length // synonym to magnitude
vector.lengthSquared // 430.25
vector.dotProduct(point) // 127.5
vector.crossProduct(point) // -72.5
vector.distanceTo(point) // 15.0083310198036
vector.reversed  // {dx -20.0, dy -5.5}
vector.normalized  // {dx 0.96420539280379, dy 0.265156483021042} 
vector.limited(20) // {dx 19.2841078560758, dy 5.30312966042085}
vector.scaled(20) // synonym to limited()
vector.angled(90) // {dx -9.29415287392715, dy 18.5436976451859}
运算符
var point:CGPoint = CGPoint(x: 2.0, y: 2.0)
var vector:CGVector = CGVector(horizontal: 2.0, vertical: 2.0)

point = point + vector
point += vector

point = point - vector
point -= vector

point = point * vector
point *= vector

point = point / vector
point /= vector

vector = vector * 4.5
vector *= 20.5

vector = vector / 2.0
vector /= 2.0
等价和可比较的
point == vector
point != vector
point < vector
point <= vector
point > vector
point >= vector
泛型初始化器
let point = CGPoint(horizontal:2.0,vertical:2.0)
let vector = CGVector(horizontal:2.0,vertical:2.0)
let yourStruct = YourStruct(horizontal:2.0,vertical:2.0)
类型约束
class Boid<T:VectorOperatable, U:VectorOperatable> {
  var position = T(horizontal: 2.0, vertical: 2.5)
  var velocity = U(horizontal: 2.0, vertical: 2.5)
}

let boid = Boid<CGPoint, CGVector>()
boid.position = CGPointZero
boid.velocity = CGVectorMake(20, 20)
boid.velocity > boid.position // True

扩展

等价和可比较的
protocol VectorOperatable  {
  init(horizontal:Double,vertical:Double)
  var horizontal:Double { get set }
  var vertical:Double { get set }
}
数学函数
protocol VectorArithmetic : VectorOperatable {
  var angleInRadians:Double {get}
  var magnitude:Double {get}
  var length:Double {get}
  var lengthSquared:Double {get}
  func dotProduct <T : VectorArithmetic>(vector:T) -> Double
  func distanceTo <T : VectorArithmetic>(vector:T) -> Double
  var reversed:Self {get}
  var normalized:Self {get}
  func limited(scalar:Double) -> Self
  func scaled(scalar:Double) -> Self
  func angled(scalar:Double) -> Self 
}

联系

如果您在项目中使用了 VectorArithmetic,我非常乐意听到您的反馈。

电子邮件:[email protected]
推特:@seivanheidari


许可证

VectorArithmetic 是 © 2014 Seivan 的财产,可以在MIT 许可证下自由分发。请参阅LICENSE.md 文件。