我正在使用Swift进行游戏,我有一个规范化的向量,然后我应用随机标量。这个向量当然是我计算的角度:
atan2(vec.dx, vec.dy)
当我将物体推向不同方向时,我在控制台中收到的角度值如下:
左= -1.5 上涨= 0,0 对= 1,5
这是一张显示我的意思的图片。
现在,我想要完成的是,如果物体被推到低于-0.5或低于0.5(即:-1.5或1.5),则最小角度将是-0.5和0.5。我想修改那个矢量,这样角度值就是最小值。
那我怎么能做到这一点?对不起,我吮吸数学。并提前感谢。
在挖掘更多之后,我找到了一种用Java做的“方式”,我将它翻译成Swift。我有这个:
/* Calculate the angle of `vector` */
func angle() -> CGFloat {
return atan2(dx, dy)
}
func rotate(vec: CGVector, degrees: Double) -> CGVector {
let degToRad = M_PI/180
return vec.rotateRadians(vec, radians: degrees * degToRad)
}
func rotateRadians(vec: CGVector, radians: Double) -> CGVector {
let ca = CGFloat(cos(radians))
let sa = CGFloat(sin(radians))
return CGVector(dx: ca * vec.dx - sa * vec.dy, dy: sa * vec.dx + ca * vec.dy)
}
然后我像这样使用它:
let oldVec = CGVector(dx: pB.x - pA.x, dy: pB.y - pA.y) // Vector from A to B
let random = CGFloat(randomNumber(280...330))
let scalar = random / oldVec.length()
var radian = 0.0
if oldVec.angle() <= -0.5 {
radian = -0.5
}else if oldVec.angle() >= 0.5 {
radian = 0.5
}
var newVec = oldVec.rotateRadians(oldVec, radians: radian)
这样好吗?这似乎有点工作。但我不确定我是否做错了。