English 中文(简体)
在Cocos2d中求Bezier曲线问题的导数
原标题:Getting the derivative of a Bezier curve problem in Cocos2d

在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是我试图旋转的导弹。我只是对整个衍生产品感到困惑(换句话说,我真的很失落和困惑)。我需要帮助来找出问题所在。。。很抱歉代码很乱,方程式很长,我可以想办法让它不那么乱。

最佳回答

事实上,我不明白你是怎么把一个导数放到一个浮点数里的。这是因为Bizier曲线是二维参数曲线(它有x和y分量)。它不是函数y(x)。在立方体情况下,它是:

x(t) = x0 + x1*t + x2*t*t + x3*t*t*t
y(t) = y0 + y1*t + y2*t*t + y3*t*t*t

让我们称之为form1。实际上,它只不过是两个三阶多项式。三次贝塞尔曲线的传统形式是

注意,这里的B(t)是二维向量(x(t),y(t))。因此,如果你有一种传统的定义贝塞尔曲线的方法,你可以通过计算系数x0、x1和son将其转换为form1。

如果你现在已经用公式1定义了贝塞尔曲线,那么很容易得到导数:

x (t) = x1 + 2*x2*t + 3*x3*t*t
y (t) = y1 + 2*y2*t + 3*y3*t*t

现在向量(x(t),y(t))-是贝塞尔曲线上的速度。它也是曲线的切线向量。垂直矢量将是(-y(t),x(t))或((y(t),-(x(t))。

Here are the coefficients: enter image description here

对于y系数,公式完全相同。它只是将py0,py1,py2,py3而不是px0。

问题回答

暂无回答




相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。

热门标签