我是一名经验丰富的iPhone开发人员,但我是Cocos2D和Box2D的新手,我完全承认我需要一次物理复习。我想要构建的是一个预览轨迹(一个基于输入变量指示投射物飞行路径的弧线,类似于许多愤怒的小鸟风格的游戏)。
不过,我想做一些不同的事情,设置起点(屏幕上投射物的起始位置)和终点(目标位置)。不过,改变的是基于用户输入的抛物线的高度。因此,从这个意义上说,我不是用抛物线路径来预览目标将落在哪里,而是用炮弹击中目标的角度(同样,抛物线总是终止于目标)。
我在网上没有看到任何能完全满足我需求的东西。大多数可用的代码更多地与向用户显示炮弹将落在哪里有关。我想确定应用于物体的角度(矢量)和脉冲,以匹配不同的抛物线振幅,但总是在同一位置结束。一张图片胜过千言万语,所以我链接到了一张自制的图片,试图帮助解释(所以不会让我嵌入图片)。
示例图像
如有任何帮助,我们将不胜感激。
让我们用数学模型来表示。。。抛物线方向的Angle
是输入变量,将计算出抛物线在0
和target point
、height
中穿过x轴。
抛物线看起来是这样的:y = x*(a-x)*b
,其中a
定义到目标点的距离,b
是(与a
一起)影响起始角度和高度的某个值。我们可以通过原点中心的atan (x/y)
来计算角度。我们知道切线表示抛物线的导数。导数为y' = a*b - 2*x*b
,在原点中心为y=0
和x=0
,得到[derivative in origin center] = a*b
。a
预定义为到目标点的距离,因此angle
受b
:angle = atan(a*b)
变化的影响。
在这一点上,我们有抛物线方程y = x*(a-x)*b
、预定义的a=[distance to target point]*4
和角度方程angle=atan(a*b)
,其中b
是输入值。例如:
- 到点的距离为10->
a=40
- 用户输入45*->tan(45*)=1,
b = tan(45*)/a
->b=1/40
- 将这些值放入方程
y = x*(a-x)*b
:y = x*(40-x)/40
中,并检查
关于最大高度,由方程a*x^2+b*x+c = 0
计算,条件是х=-b/2а
。我认为,自己计算应该不难:)
尝试检查贝塞尔曲线。您可以使用它们定义所需的路径。你可以在有或没有cocos 2d的情况下使用它们。