第四节 Bezier曲线和曲面
 
 
void bez_to_points(int n,int npoints,double P[],double points[]) // P为控制点坐标 points为采用几何作图算法生成的Bezier曲线上的离散点序列
离散点序列points的个数为npoints
控制点P的个数为n +1

{ double t,delt;
delt=1.0/(double)npoints;//将参数t npoints等分
t=0.0;
for(int i=0;i<=npoints;i++)
{ points[i]=decas(n, P, t); //分别求出npoints+1个离散点points的坐标
t+=delt;
}
}
double decas(int n,double P[],double t)
{
int m,i;
double *R, *Q, P0;
R = new double[n +1];
Q = new double[n +1];
for(i=0;i<=n;i++)
R[i]= P [i]; //将控制点坐标P保存于R中

//需要作n次外部循环,方能产生最终Bezier曲线在点t的值
for(m=n;m>0;m--)
{
//n次Bezier曲线在点t的值,可由两条n-1次Bezier曲线
//在点t的值通过线性组合而求得。
Q[i]= R [i]+t*( R [i+1]- R [i]);
}
for(i=0;i<= m -1;i++)
R[i]= Q [i];
}
P0=R[0];
delete R;
delete Q;
return (P0);
}
   
上一页 | 下一页  
  第一节 曲线和曲面表示的基础知识
第二节 Hermite多项式
第三节 Coons曲面
第四节 Bezier曲线和曲面
第五节 B样条曲线和曲面