BézierCurve没画直

时间:2011-12-09 16:44:01

标签: objective-c cocos2d-iphone bezier

我确实制作了使用Objective-C和Cocos2D创建Bézier曲线的算法。这是我的代码

-(int)factorial:(int)x{
    int sum=1;
    int i;
    if(x == 0){
        return 1;
    }else{
        for(i=1;i<x;i++){
            sum = sum*i;
        }
        return sum;
        }
}

-(int)binomialCoefficient:(int)n:(int)i{
    int sum;
    //NSLog([NSString stringWithFormat:@"fac n-i=%f\n", fach] );
    sum = [self factorial:n]/([self factorial:i]*[self factorial:(n-i)]);

    return sum;
}

-(float)convertT:(int)t{
    return t*(0.001);
}

-(float)power:(float)a:(int)b{
        int i;
    float hasil=1;
    for(i=0;i<b;i++){
        hasil = hasil*a;
    }
    return hasil;
}

-(float)bernstein:(float)t:(int)n:(int)i{
    float sum = 0;

    sum = [self binomialCoefficient:n:i]*[self power:t :i]*[self power:(1-t) :(n-i)];
    //NSLog([NSString   stringWithFormat:@"yeah"]);
    return sum;
}

并且为了实现,您只需放置一个x和y数组并访问它。例如,为了在控制曲线中绘制一个点,我就像这样做了

float myPx = px[i];
float myPy = py[i];
posx = posx+([self bernstein:theT :banyak-1 :i]*myPx);
posy = posy+([self bernstein:theT :banyak-1 :i]*myPy);

是的,这段代码没有给出完美的好线,但我尝试逐点绘制它。 效果很好,但是当我尝试使用3个点时会出现问题。弯曲线条的中间点不像我预期的那样。例如,如果我在这些坐标中放置3个点: 一个(100,200) B(250250) C(500200)

它没有弯曲而是弯曲。如果我想说的话,我必须把它放得更高。

我在语法或数据类型中做错了吗?或者只是我的算法?

提前致谢

最诚挚的问候 (抱歉我的英语不好)

1 个答案:

答案 0 :(得分:1)

阶乘循环应为

for ( i = 1 ; i <= x ; i++ )

而不是

for ( i = 1 ; i < x ; i++ )