swift - 为什么要通过向量的 sqrt 创建单位向量

标签 swift math vector sprite-kit

我正在关注有关 Sprite Kit 的精彩教程:

http://www.raywenderlich.com/84434/sprite-kit-swift-tutorial-beginners

我想知道一件事,单位向量的创建。 在本教程中,单位向量是通过调用归一化函数创建的:

    func length() -> CGFloat {
      return sqrt(x*x + y*y)
  }

    func normalized() -> CGPoint {
        return self / length()
 }

这稍后用于将“偏移”向量制作为单位向量:

let offset = touchLocation - projectile.position

let direction = offset.normalized()

我不明白,为什么你用 sqrt 计算向量的长度,然后用结果除向量。不能直接将向量除以 1 吗?

最佳答案

不可能将一个向量除以一个向量——这样的运算根本就没有定义,一般来说也不能进行有意义的定义。

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

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

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

关于swift - 为什么要通过向量的 sqrt 创建单位向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059870/

相关文章:

ios - 如何使用 SpriteKit 替换背景图像?

swift - Alamofire - NSURLCache 不工作?

c++ - 使用 OpenCV VideoCapture 和 C++ vector 显示文件中的图像

c++ - 类中的错误二维 vector 类初始化

arrays - Swift 数组按字母顺序和组顺序排序

ios - @Published 用于计算属性(或最佳解决方法)

C++:奇怪的数学结果

c# - 从高斯分布中抽取随机值的最快方法是什么?

c# - 对数组中的所有值执行算术运算

ios - 如何在 spriteKit 中以特定角度施加力?