如何通过在Swift中使用另一个角度来更改矢量的角度?

时间:2016-10-28 22:28:20

标签: ios swift math vector

我正在使用Swift进行游戏,我有一个规范化的向量,然后我应用随机标量。这个向量当然是我计算的角度:

atan2(vec.dx, vec.dy)

当我将物体推向不同方向时,我在控制台中收到的角度值如下:

左= -1.5 上涨= 0,0 对= 1,5

这是一张显示我的意思的图片。

enter image description here

现在,我想要完成的是,如果物体被推到低于-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)

这样好吗?这似乎有点工作。但我不确定我是否做错了。

0 个答案:

没有答案