
2D
图形和
Sprite Kit
|
181
图
6
-
4
:数量积可用于衡量两个向量之间的夹角
在数学符号里,数量积运算符用
•
字符表示。由于
Swift
允许我们定义新的运算符,
所以我们可以定义一个用于计算两个向量的数量积的全新的运算符,例如:
//
声明一个操作符,左结合,优先级等于
+
号运算的优先级
infix operator •
// (
输入技巧:
Option+8
可以输入
•
字符
)
//
定义操作符函数,即
•
操作所要执行的运算
func • (left : CGPoint, right : CGPoint) -> Double {
return Double(left.x * right.x + left.y * right.y)
}
//
用法
:
v1 • v2
Swift
自定义运算符的功能非常强大,因为它可以节省大量重复代码,但也
存在一些问题。除非我们自定义的运算符能被其他阅读代码的人看懂(哪怕
是你自己,也不能保证将来还能看得懂它吧?),否则将一些晦涩难懂的符
号定义为运算符将降低代码的可读性。
在上面的例子中,我们把
•
字符定义为运算符是可行的,因为只要学过向量
数学符号的人,都能理解它。但是如果我们不能保证这点,则最好使用扩展,
为类增加一个
dotProduct
方法。
数量积有一个有趣的特点,两个向量的数量积等于这
3
个值的乘积:二者的长度、
二者夹角的余弦值:
// A
、
B
为向量,
α
为二者间夹角
A • B = |A|
×
|B|
×
cos
α