我在(-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}}
答案 0 :(得分:0)
代码几乎是正确的,除了目标位置有错误的y分量。我对它进行了修改,因此y处于地面水平,现在它正在按预期工作。