我正在关注有关 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/