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

作者: 菠萝头咯 | 来源:发表于2019-02-17 22:12 被阅读2次

贝塞尔曲线

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


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

控制点控制曲线

#include<stdio.h>

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<stdio.h>/

#include<stdlib.h>

#include<time.h>

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;

}

还有

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

相关文章

  • Android贝塞尔曲线相关资料

    资料整理: Android-贝塞尔曲线 贝塞尔曲线扫盲 练习贝塞尔曲线 贝塞尔曲线绘制在线演示(带坐标) 生成三阶...

  • 三阶贝塞尔曲线拟合1/4圆

    根据贝塞尔曲线的知识,我们知道三阶贝塞尔曲线的参数方程如下,其中A、B、C、D为四个控制点坐标,P(t)表示曲线上...

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

    贝塞尔曲线 贝塞尔曲线(Bézier curve),是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来...

  • 贝塞尔曲线入门

    本章目录 Part One:一阶贝塞尔曲线 Part Two:二阶贝塞尔曲线 Part Three:三阶贝塞尔曲线...

  • Android 实现波浪动画的两种方式

    一、国际惯例先上效果 二、实现思路 1、贝塞尔曲线实现 什么是贝塞尔曲线,贝塞尔曲线的原理,二阶、三阶、四阶、五阶...

  • Android-贝塞尔曲线实现水波纹动画

    Android 系统api提供了quadTo和rQuadTo实现二阶贝塞尔曲线,三阶贝塞尔曲线在这不做阐述,只不过...

  • 贝塞尔曲线做画布和不规则布局

    贝塞尔曲线也是自定义View的常用知识点,在Android中也有API支持,二阶贝塞尔用的是quadTo,三阶是c...

  • 贝塞尔曲线

    二阶贝塞尔曲线为了确定曲线上的一个点,需要进行两轮取点的操作,因此我们称得到的贝塞尔曲线为二次曲线. 使用三阶贝塞...

  • ios知识点(7)贝塞尔曲线

    贝塞尔曲线扫盲iOS UIBezierPath贝塞尔曲线常用方法iOS UIBezierPath(贝塞尔曲线)iO...

  • 贝塞尔曲线实现的Viewpager指示器

    贝塞尔曲线实现的Viewpager指示器 闲来无事利用path 三阶曲线写的一个小东西,关于贝塞尔曲线相关的博客网...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/ogebjqtx.html