为什么要按向量的sqrt创建单位向量

时间:2015-10-10 23:04:03

标签: swift math vector sprite-kit

我正在关注一个关于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?

1 个答案:

答案 0 :(得分:2)

不可能将矢量除以矢量 - 这样的操作根本就没有定义,也不能有意义地定义。

可以做的是将矢量除以(或乘),它简单地将矢量的每个元素除以(或乘以)该数字。特别是,将向量的每个元素乘以或除以相同的数字将保持其方向不变(只要数字为正),并将其长度乘以或除以该数。

因此,将(非零)向量除以其自身长度将保持其方向不变,但将改变其长度,使其新长度等于其旧长度除以其旧长度 - 即,新长度向量将为1,(根据定义)使其成为单位向量。

(唯一不起作用的情况是全零矢量,其长度为0.不可能将全零矢量转换为具有相同方向的单位矢量,这两者都是因为没有定义零归零,也因为全零矢量无论如何都没有方向。)