Я сделал алгоритм для создания кривой Безье с Objective-C и Cocos2D.Вот мой код
-(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 точки в этих координатах: a (100,200) b (250,250) c (500,200)
Это не изгибается, а изгибается вниз.Если я хочу выразить это прямо, я должен поместить это полностью выше.
Я неправильно делаю это в синтаксисе или типах данных?Или это только мой алгоритм?
Заранее спасибо
С наилучшими пожеланиями (извините за мой плохой английский)