在cocos2d中,您可以使用ccBezierConfig在贝塞尔路径中移动精灵。这不是我的问题,但我有一个导弹,并试图使它垂直于曲线上的那个点旋转。我无法弄清楚一段时间,然后我的朋友告诉我有关衍生品。现在我需要明显地找到贝塞尔曲线的导数。我在Google上搜索,发现它在这个页面上:http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezier-der.html。于是我试图在这里实现与旋转的3种方法的导弹,他们是:在Cocos2d中获取贝塞尔曲线问题的导数
-(float)f:(int)x {
if (x == 0)
return 1.0f;
float result = 1;
while (x>0) {
result = result*x;
x--;
}
return result;
}
-(float)B:(float)u i:(int)i n:(int)n {
return ([self f:n])/([self f:i]*[self f:(n-i)])*pow(u, (float)i)*pow(1-u, (float)n-i);
}
-(void)rotateMissile:(float)delta {
//Get bezier derivative...
float y = [self B:missileP1.controlPoint_1.x i:0 n:2]+[self B:missileP1.controlPoint_2.x i:1 n:2]
*2*(missileP1.controlPoint_1.x - missileP1.controlPoint_2.x);
//Take the y and rotate it...
missile1.rotation = atanf(y);
}
第一种方法是阶乘,二是应该找到在方程衍生物B。第三种方法应该找到实际的导数,并使用atanf将斜率转换为度数来旋转导弹。
的rotateMissile正在不断称为像这样:
[self schedule:@selector(rotateMissile:)];
missileP1是ccBezierConfig对象。导弹1是我试图旋转的导弹。我对这个整体衍生的东西感到困惑(换句话说,我真的迷失了和困惑)。我需要帮助,试图弄清楚什么是错的...抱歉,代码是混乱的,方程式很长,我可以找出一种方法来减少混乱。
是x0,y0,y1,x1控制点,是t导弹的位置(在我的情况下)? – Dair 2011-05-28 03:51:24
@anon:不,控制点是P0,P1,P2,P3但是计算x0,y0,x1,...,y3很简单,只需删除括号并收集。曲线参数。你可以在这里阅读更多关于这个http://en.wikipedia.org/wiki/Bezier_curve – Andrew 2011-05-28 05:05:03
由于我所有的d oing给出了Cocos2d中的点(2点的影响力和终点),我怎么知道x0-y3是相等的?从我看到的(我可能会误解)x0 - y3是常量。但是,这些常数的值是什么?我怎么知道在bezier路径(导弹所遵循的路径)的特定时间t应该相等。 (我知道t应该在0和1之间,但是当导弹完成其1/4的行程时,应该如何?1/2?1/3?等等)。 – Dair 2011-05-28 20:54:28