我正在关注一个关于Sprite Kit的精彩教程:
http://www.raywenderlich.com/84434/sprite-kit-swift-tutorial-beginners
有一件事我想知道,单位矢量的创建。 在本教程中,通过调用normalize函数创建单位向量:
func length() -> CGFloat {
return sqrt(x*x + y*y)
}
func normalized() -> CGPoint {
return self / length()
}
稍后用于制作"偏移"向量单位向量:
let offset = touchLocation - projectile.position
let direction = offset.normalized()
我不明白,为什么用squrt计算向量的长度然后用结果划分向量。你不能将矢量单独划分为1?
答案 0 :(得分:2)
不可能将矢量除以矢量 - 这样的操作根本就没有定义,也不能有意义地定义。
可以做的是将矢量除以(或乘)数,它简单地将矢量的每个元素除以(或乘以)该数字。特别是,将向量的每个元素乘以或除以相同的数字将保持其方向不变(只要数字为正),并将其长度乘以或除以该数。
因此,将(非零)向量除以其自身长度将保持其方向不变,但将改变其长度,使其新长度等于其旧长度除以其旧长度 - 即,新长度向量将为1,(根据定义)使其成为单位向量。
(唯一不起作用的情况是全零矢量,其长度为0.不可能将全零矢量转换为具有相同方向的单位矢量,这两者都是因为没有定义零归零,也因为全零矢量无论如何都没有方向。)