在cocos2d中,您可以使用ccBezierConfig在Bezier路径中移动精灵。但这不是我的问题,我有一枚导弹,正试图让它垂直于曲线上的那个点旋转。我有一段时间想不通,然后我的朋友告诉我衍生品的事。现在我需要找到一个贝塞尔曲线的导数。我在谷歌上搜索并在以下页面上找到了它:http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/Bezier-der.html。因此,我尝试使用以下三种方法旋转导弹:
-(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将斜率转换为度数来找到实际导数并旋转导弹。
旋转导弹被连续地这样调用:
[self schedule:@selector(rotateMissile:)];
missionP1是ccBezierConfig对象。导弹1是我试图旋转的导弹。我只是对整个衍生产品感到困惑(换句话说,我真的很失落和困惑)。我需要帮助来找出问题所在。。。很抱歉代码很乱,方程式很长,我可以想办法让它不那么乱。