Bezier曲线的绘制 (C语言+TC2.0实现)

Bezier曲线:

线性公式

给定点P0、P1,线性贝兹曲线只是一条两点之间的直线。这条线由下式给出:

且其等同于线性插值。

二次方公式

二次方贝兹曲线的路径由给定点P0、P1、P2的函数B(t)追踪:

TrueType字型就运用了以贝兹样条组成的二次贝兹曲线。

三次方公式

P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝兹曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。
曲线的参数形式为:

现代的成象系统,如PostScript、Asymptote和Metafont,运用了以贝兹样条组成的三次贝兹曲线,用来描绘曲线轮廓。

一般参数公式

阶贝兹曲线可如下推断。给定点P0、P1、…、Pn,其贝兹曲线即:

如上公式可如下递归表达: 用表示由点 P0、 P1、…、 Pn所决定的贝兹曲线。
用平常话来说,阶的贝兹曲线,即双阶贝兹曲线之间的插值。



代码如下:

#include
#include
float decas(int degree,float coeff[],float t){
     int r,i;
     float t1;
     float coeffa[10];
     t1=1.0-t;
     for(i=0;i<=degree;i++){
         coeffa[i]=coeff[i];
     }
     for(r=1;r<=degree;r++){
        for(i=0;i<=degree-r;i++){
            coeffa[i]=t1*coeffa[i]+t*coeffa[i+1];
        }
     }
     return (coeffa[0]);
}
void main(){
    int i,n,k;
	int gd = DETECT, gm = 0; 
    float t,x,y;
    static float px[4];
    static float py[4];
    n=3;
    k=3000;
    px[0]=50; px[1]=140;px[2]=400,px[3]=600;
    py[0]=400; py[1]=20;py[2]=40,py[3]=400;
	initgraph(&gd, &gm, "c:\\TC\\BGI");
    cleardevice();
    setcolor(BLUE);
    for (i=0;i



你可能感兴趣的:(计算机图形学)