c语言打印贝塞尔曲线坐标(三阶)

贝塞尔曲线

贝塞尔曲线(Bézier curve),是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝赛尔曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。贝塞尔曲线是计算机图形学中相当重要的参数曲线,在一些比较成熟的位图软件中也有贝塞尔曲线工具,如PhotoShop等,模拟鼠标移动轨迹过验证码的时候也会用到。


屁话不多说 直接上代码鸭!

控制点控制曲线

#include

typedef struct Point

{

    int x;

    int y;

}Point;

int main()

{

    Point p0, p1, p2, p3 ,pot;//起始点 控制点1 控制点2 终止点3 绘制点

    float k,b;//斜率 和 截距

    p0.x = 100;//比如这是起始点x

    p0.y = 400;//比如这是起始点y

    p1.x = 100;//控制点坐标可以随便整数

    p1.y = 800;//控制点坐标可以随便整数

    p2.x = 800;//控制点坐标可以随便整数

    p2.y = 100;//控制点坐标可以随便整数

    p3.x = 1100;//比如这是起终点x

    p3.y = 600;//比如这是起终点y

    printf("打印控制点坐标p1=%d,%d    p2=%d,%d\n",p1.x,p1.y,p2.x,p2.y);

    float  t = 0.01;//曲线参数t

    float temp = 1 - t;

    printf("输出轨迹\nx = [");

    for(t=0;t<1;t+=0.01)

    {

        temp = 1 - t;

        pot.x = p0.x * temp * temp * temp + 3 * p1.x * t * temp * temp + 3 * p2.x * t * t * temp + p3.x * t * t * t;

        printf("%d,",pot.x);

    }

    printf("]\ny = [");

    for(t=0;t<1;t+=0.01)

    {

        temp = 1 - t;

        pot.y = p0.y * temp * temp * temp + 3 * p1.y * t * temp * temp + 3 * p2.y * t * t * temp + p3.y * t * t * t;

        printf("%d,",pot.y);

    }

    printf("]\n");

    return 0;

}



还有模拟鼠标行为的轨迹代码 每次坐标会不一样

/*

    模拟鼠标移动轨迹

*/

#include/

#include

#include

typedef struct Point

{

    int x;

    int y;

}Point;

int main()

{

    srand(time(NULL));

    Point p0, p1, p2, p3 ,pot;//起始点 控制点1 控制点2 终止点3 绘制点

    float k,b;//斜率 和 截距

    p0.x = 100;//比如这是起始点x

    p0.y = 400;//比如这是起始点y

    p1.x = rand()%1399;//控制点坐标可以随便整数

    p1.y = -1;//控制点坐标可以随便整数

    p2.x = rand()%1399;//控制点坐标可以随便整数

    p2.y=-1;//控制点坐标可以随便整数

    p3.x = 1100;//比如这是起终点x

    p3.y = 600;//比如这是起终点y

    k = (p3.y*1.0-p0.y*1.0)/(p3.x*1.0-p0.x*1.0);

    b = p0.y*1.0 - k * p0.x*1.0;

    //printf("k,b = %f, %f\n",k,b);

    while(p1.y>1399 || p1.y<0){//改变控制点的y值不要偏的太离谱 可以改动300越小波动越小

        p1.y = k*p1.x*1.0+b+(rand()%300-150)*1.0;

        //printf("打印控制点坐标p1.x = %d  p1.y = %d %f \n",p1.x,p1.y,k*p1.x*1.0+b);

    }

    while(p2.y>1399 || p2.y<0){

        p2.y = k*p2.x*1.0+b+(rand()%300-150)*1.0;

        //printf("p2.x = %d  p2.y = %d %f \n",p2.x,p2.y,k*p1.x*1.0+b);

    }

    printf("打印控制点坐标p1=%d,%d    p2=%d,%d\n",p1.x,p1.y,p2.x,p2.y);

    float  t = 0.01;//曲线参数t

    float temp = 1 - t;

    printf("输出轨迹\nx = [");

    for(t=0;t<1;t+=0.01)

    {

        temp = 1 - t;

        pot.x = p0.x * temp * temp * temp + 3 * p1.x * t * temp * temp + 3 * p2.x * t * t * temp + p3.x * t * t * t;

        printf("%d,",pot.x);

    }

    printf("]\ny = [");

    for(t=0;t<1;t+=0.01)

    {

        temp = 1 - t;

        pot.y = p0.y * temp * temp * temp + 3 * p1.y * t * temp * temp + 3 * p2.y * t * t * temp + p3.y * t * t * t;

        printf("%d,",pot.y);

    }

    printf("]\n");

    return 0;

}

c语言打印贝塞尔曲线坐标(三阶)_第1张图片
还有

图用python画了 ,c语言太麻烦了 就直接打印坐标啦 凑活看吧 嘻嘻嘻 不服来找我 我家住番斗大街番斗花园2号楼1001室, 我爸叫胡英俊,我妈叫张小丽, 我叫胡图图

你可能感兴趣的:(c语言打印贝塞尔曲线坐标(三阶))