我确实制作了使用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)
它没有弯曲而是弯曲。如果我想说的话,我必须把它放得更高。
我在语法或数据类型中做错了吗?或者只是我的算法?
提前致谢
最诚挚的问候 (抱歉我的英语不好)
答案 0 :(得分:1)
阶乘循环应为
for ( i = 1 ; i <= x ; i++ )
而不是
for ( i = 1 ; i < x ; i++ )