计算发射射弹到达目标的角度

时间:2018-02-28 06:47:34

标签: game-physics

我在(-1188,100,0)有一个球,需要计算它必须以1700p / s(每秒点数)到达(1188,0,0)的角度。只有作用在球上的力才是重力。此时不会模拟空气阻力。重力为980p / s。

我遇到一个准确性错误,当x = 1188时球仍然很高,比目标位置高出约90个点,以便更精确。

这是我在给定所需速度,目标矢量和重力的情况下计算发射角的方法:

func setStrike(speed: Float, angle: Float, forwardDirection: SCNVector3) {
    self.angle = angle
    self.speed = speed
    self.forwardDirection = forwardDirection
    self.positionOnStrike = self.position
}

Ball的击球方法很简单:

func update(time: Float, gravity: Float) {
    let verticalDisplacement = ((self.speed * sin(self.angle)) * time) - (0.5 * gravity * time * time)
    let forwardDisplacement = self.forwardDirection * (self.speed * cos(self.angle)) * time
    self.position = self.positionOnStrike + SCNVector3(x: forwardDisplacement.x, y: verticalDisplacement, z: forwardDisplacement.z)
}

Ball的更新方法需要花费时间,因为命中和重力= 980p / s已经过去了:

{{1}}

1 个答案:

答案 0 :(得分:0)

代码几乎是正确的,除了目标位置有错误的y分量。我对它进行了修改,因此y处于地面水平,现在它正在按预期工作。