精华内容
下载资源
问答
  • C语言平滑曲线函数

    千次阅读 2019-06-12 14:00:20
    ///////线性3点拟合平滑 void linearSmooth3 ( u8 in[], u8 out[], int N ) { int i; if ( N < 3 ) { for ( i = 0; i <= N - 1; i++ ) { out[i] = in[i]; } ...

        ///线性3点拟合平滑
     void linearSmooth3 ( u8  in[], u8  out[], int N )
    {
        int i;
        if ( N < 3 )
        {
            for ( i = 0; i <= N - 1; i++ )
            {
                out[i] = in[i];
            }
        }
        else
        {
            out[0] = ( 5 * in[0] + 2 * in[1] - in[2] ) / 6;

            for ( i = 1; i <= N - 2; i++ )
            {
                out[i] = ( in[i - 1] + in[i] + in[i + 1] ) / 3;
            }

            out[N - 1] = ( 5 * in[N - 1] + 2 * in[N - 2] - in[N - 3] ) / 6;
        }
    }

    //5点平滑

    void linearSmooth5 ( u8 in[], u8 out[], int N )
    {
        int i;
        if ( N < 5 )
        {
            for ( i = 0; i <= N - 1; i++ )
            {
                out[i] = in[i];
            }
        }
        else
        {
            out[0] = ( 3 * in[0] + 2 * in[1] + in[2] - in[4] ) / 5;
            out[1] = ( 4 * in[0] + 3 * in[1] + 2 * in[2] + in[3] ) / 10;
            for ( i = 2; i <= N - 3; i++ )
            {
                out[i] = ( in[i - 2] + in[i - 1] + in[i] + in[i + 1] + in[i + 2] ) / 5;
            }
            out[N - 2] = ( 4 * in[N - 1] + 3 * in[N - 2] + 2 * in[N - 3] + in[N - 4] ) / 10;
            out[N - 1] = ( 3 * in[N - 1] + 2 * in[N - 2] + in[N - 3] - in[N - 5] ) / 5;
        }
    }

    //7点平滑

    void linearSmooth7 ( u8 in[], u8 out[], int N )
    {
        int i;
        if ( N < 7 )
        {
            for ( i = 0; i <= N - 1; i++ )
            {
                out[i] = in[i];
            }
        }
        else
        {
            out[0] = ( 13 * in[0] + 10 * in[1] + 7 * in[2] + 4 * in[3] +
                      in[4] - 2 * in[5] - 5 * in[6] ) / 28;

            out[1] = ( 5 * in[0] + 4 * in[1] + 3 * in[2] + 2 * in[3] +
                      in[4] - in[6] ) / 14;

            out[2] = ( 7 * in[0] + 6 * in [1] + 5 * in[2] + 4 * in[3] +
                      3 * in[4] + 2 * in[5] + in[6] ) / 28;

            for ( i = 3; i <= N - 4; i++ )
            {
                out[i] = ( in[i - 3] + in[i - 2] + in[i - 1] + in[i] + in[i + 1] + in[i + 2] + in[i + 3] ) / 7;
            }

            out[N - 3] = ( 7 * in[N - 1] + 6 * in [N - 2] + 5 * in[N - 3] +
                          4 * in[N - 4] + 3 * in[N - 5] + 2 * in[N - 6] + in[N - 7] ) / 28;

            out[N - 2] = ( 5 * in[N - 1] + 4 * in[N - 2] + 3 * in[N - 3] +
                          2 * in[N - 4] + in[N - 5] - in[N - 7] ) / 14;

            out[N - 1] = ( 13 * in[N - 1] + 10 * in[N - 2] + 7 * in[N - 3] +
                          4 * in[N - 4] + in[N - 5] - 2 * in[N - 6] - 5 * in[N - 7] ) / 28;
        }
    }

    /二次函数5点拟合平滑
    void quadraticSmooth5(u8 in[], u8 out[], int N)
    {
        int i;
        if ( N < 5 )
        {
            for ( i = 0; i <= N - 1; i++ )
            {
                out[i] = in[i];
            }
        }
        else
        {
            out[0] = ( 31 * in[0] + 9 * in[1] - 3 * in[2] - 5 * in[3] + 3 * in[4] ) / 35;
            out[1] = ( 9 * in[0] + 13 * in[1] + 12 * in[2] + 6 * in[3] - 5 *in[4]) / 35;
            for ( i = 2; i <= N - 3; i++ )
            {
                out[i] = ( - 3 * (in[i - 2] + in[i + 2]) +
                          12 * (in[i - 1] + in[i + 1]) + 17 * in[i] ) / 35;
            }
            out[N - 2] = ( 9 * in[N - 1] + 13 * in[N - 2] + 12 * in[N - 3] + 6 * in[N - 4] - 5 * in[N - 5] ) / 35;
            out[N - 1] = ( 31 * in[N - 1] + 9 * in[N - 2] - 3 * in[N - 3] - 5 * in[N - 4] + 3 * in[N - 5]) / 35;
        }
    }

    //7点
    void quadraticSmooth7(u8 in[], u8 out[], int N)
    {
        int i;
        if ( N < 7 )
        {
            for ( i = 0; i <= N - 1; i++ )
            {
                out[i] = in[i];
            }
        }
        else
        {
            out[0] = ( 32 * in[0] + 15 * in[1] + 3 * in[2] - 4 * in[3] -
                      6 * in[4] - 3 * in[5] + 5 * in[6] ) / 42;

            out[1] = ( 5 * in[0] + 4 * in[1] + 3 * in[2] + 2 * in[3] +
                      in[4] - in[6] ) / 14;

            out[2] = ( 1 * in[0] + 3 * in [1] + 4 * in[2] + 4 * in[3] +
                      3 * in[4] + 1 * in[5] - 2 * in[6] ) / 14;
            for ( i = 3; i <= N - 4; i++ )
            {
                out[i] = ( -2 * (in[i - 3] + in[i + 3]) + 3 * (in[i - 2] + in[i + 2]) + 6 * (in[i - 1] + in[i + 1]) + 7 * in[i] ) / 21;
            }
            out[N - 3] = ( 1 * in[N - 1] + 3 * in [N - 2] + 4 * in[N - 3] + 4 * in[N - 4] + 3 * in[N - 5] + 1 * in[N - 6] - 2 * in[N - 7] ) / 14;

            out[N - 2] = ( 5 * in[N - 1] + 4 * in[N - 2] + 3 * in[N - 3] +2 * in[N - 4] + in[N - 5] - in[N - 7] ) / 14;

            out[N - 1] = ( 32 * in[N - 1] + 15 * in[N - 2] + 3 * in[N - 3] -4 * in[N - 4] - 6 * in[N - 5] - 3 * in[N - 6] + 5 * in[N - 7] ) / 42;
        }
    }

    /**三次函数拟合平滑 */
    void cubicSmooth5 ( u8 in[], u8 out[], int N )
    {

        int i;
        if ( N < 5 )
        {
            for ( i = 0; i <= N - 1; i++ )
                out[i] = in[i];
        }

        else
        {
            out[0] = (69 * in[0] + 4 * in[1] - 6 * in[2] + 4 * in[3] - in[4]) / 70;
            out[1] = (2 * in[0] + 27 * in[1] + 12 * in[2] - 8 * in[3] + 2 * in[4]) / 35;
            for ( i = 2; i <= N - 3; i++ )
            {
                out[i] = (-3 * (in[i - 2] + in[i + 2])+ 12 * (in[i - 1] + in[i + 1]) + 17 * in[i] ) / 35;
            }
            out[N - 2] = (2 * in[N - 5] - 8 * in[N - 4] + 12 * in[N - 3] + 27 * in[N - 2] + 2 * in[N - 1]) / 35;
            out[N - 1] = (- in[N - 5] + 4 * in[N - 4] - 6 * in[N - 3] + 4 * in[N - 2] + 69 * in[N - 1]) / 70;
        }
        return;
    }

    void cubicSmooth7(u8 in[], u8 out[], int N)
    {
        int i;
        if ( N < 7 )
        {
            for ( i = 0; i <= N - 1; i++ )
            {
                out[i] = in[i];
            }
        }
        else
        {
            out[0] = ( 39 * in[0] + 8 * in[1] - 4 * in[2] - 4 * in[3] +1 * in[4] + 4 * in[5] - 2 * in[6] ) / 42;
            out[1] = ( 8 * in[0] + 19 * in[1] + 16 * in[2] + 6 * in[3] -4 * in[4] - 7* in[5] + 4 * in[6] ) / 42;
            out[2] = ( -4 * in[0] + 16 * in [1] + 19 * in[2] + 12 * in[3] + 2 * in[4] - 4 * in[5] + 1 * in[6] ) / 42;
            for ( i = 3; i <= N - 4; i++ )
            {
                out[i] = ( -2* (in[i - 3] + in[i + 3]) +3* (in[i - 2] + in[i + 2]) +6* (in[i - 1] + in[i + 1]) + 7* in[i] ) / 21;
            }
            out[N - 3] = ( -4* in[N - 1] + 16* in [N - 2] + 19* in[N - 3] +12* in[N - 4] + 2* in[N - 5] - 4* in[N - 6] + 1* in[N - 7] ) / 42;
            out[N - 2] = ( 8* in[N - 1] + 19* in[N - 2] + 16* in[N - 3] + 6* in[N - 4] - 4* in[N - 5] - 7* in[N - 6] + 4* in[N - 7] ) / 42;
            out[N - 1] = ( 39* in[N - 1] + 8* in[N - 2] - 4* in[N - 3] -4* in[N - 4] + 1* in[N - 5] + 4* in[N - 6] - 2* in[N - 7] ) / 42;
        }
    }

    展开全文
  • 利用贝赛尔曲线函数在arcgis图层中绘制平滑曲线,通过地图上的几个控制点,在客户端绘制平滑曲线,可用于客户端绘制等值线
  • 贝塞尔曲线函数 曲线平滑算法

    热门讨论 2011-02-21 14:26:28
    详细源码讲解如何计算贝塞尔曲线,可以实现曲线平滑算法
  • 函数定义: 参考:https://en.wikipedia.org/wiki/Smoothstep 相关函数图形如下: 计算机图形中经常用到正如上图所示的:两个smooth()函数相减。 相关C++代码:

    函数定义:

    参考:https://en.wikipedia.org/wiki/Smoothstep
    这里写图片描述

    这里写图片描述

    相关函数图形如下:

    这里写图片描述
    计算机图形中经常用到正如上图所示的:两个smooth()函数相减。

    相关C++代码:

    这里写图片描述

    展开全文
  • Qt用算法画平滑曲线(cubicTo)

    万次阅读 2018-03-23 21:45:50
    Qt 中可以使用 QPainterPath::cubicTo() 函数绘制如下的平滑曲线 函数原型:void QPainterPath::​cubicTo(const QPointF &amp; c1, const QPointF &amp; c2, const QPointF &amp; endPoint) 使用C1...

    Qt 中可以使用 QPainterPath::cubicTo() 函数绘制如下的平滑曲线
    这里写图片描述
    函数原型:void QPainterPath::​cubicTo(const QPointF & c1, const QPointF & c2, const QPointF & endPoint)
    使用C1和C2指定的控制点在当前位置和给定端点之间添加三次贝塞尔曲线,添加曲线后,当前位置将更新为曲线的终点

    绘制平滑曲线的关键是控制点的计算,sp 为线段的起始点,ep 为线段的终点,c1,c2 为贝塞尔曲线的控制点,其坐标计算如下
    这里写图片描述
    上代码:

    头文件:

    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        void paintEvent(QPaintEvent *);
        ~Widget();
    
    private:
        Ui::Widget *ui;
    };
    
    #endif // WIDGET_H
    

    cpp文件:

    #include "widget.h"
    #include "ui_widget.h"
    #include <QPainter>
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::paintEvent(QPaintEvent *) {
        // 曲线上的点
        static QList<QPointF> points = QList<QPointF>() << QPointF(0, 0) << QPointF(100, 100) << QPointF(200, -100)
                                                        << QPointF(300, 100) << QPointF(330, -80) << QPointF(350, -70);
        QPainterPath path(points[0]);
        //计算
        for (int i = 0; i < points.size() - 1; ++i) {
            // 控制点的 x 坐标为 sp 与 ep 的 x 坐标和的一半
            // 第一个控制点 c1 的 y 坐标为起始点 sp 的 y 坐标
            // 第二个控制点 c2 的 y 坐标为结束点 ep 的 y 坐标
            QPointF sp = points[i];
            QPointF ep = points[i+1];
            QPointF c1 = QPointF((sp.x() + ep.x()) / 2, sp.y());
            QPointF c2 = QPointF((sp.x() + ep.x()) / 2, ep.y());
            path.cubicTo(c1, c2, ep);
        }
        QPainter painter(this);
        //设置渲染提示为消除锯齿
        painter.setRenderHint(QPainter::Antialiasing, true);
        //设置画笔颜色和宽度
        painter.setPen(QPen(Qt::black, 2));
        //将坐标系转换为矢量
        painter.translate(40, 130);
        //绘制path
        painter.drawPath(path);
        // 绘制曲线上的点
        painter.setBrush(Qt::gray);
        //绘制曲线上的点
        for (int i = 0; i < points.size(); ++i) {
            painter.drawEllipse(points[i], 4, 4);
        }
    }
    

    原文:http://www.qtdebug.com/qt-smooth-curve/

    展开全文
  • R语言可视化包ggplot2绘制平滑曲线、回归线实战:geom_smooth() 函数 目录 R语言可视化包ggplot2绘制平滑曲线、回归线实战:geom_smooth() 函数 #ggplot2绘制平滑曲线、回归线语法 #ggplot2绘制散点图并添加...

    R语言可视化包ggplot2绘制平滑曲线、回归线实战:geom_smooth() 函数

    目录

    R语言可视化包ggplot2绘制平滑曲线、回归线实战:geom_smooth() 函数

    展开全文
  • 主要使用两个函数进行拟合 p5=polyfit(x,y,5)函数:x表示拟合的离散数据的x的值,y表示拟合的y的离散值,5表示5阶拟合 y5=polyval(p5,x)函数,主要用于求得拟合的误差,p5表示前面的数据拟合p5,x为离散数据的x范围 ...
  • 假设变量,对x,y数据绘图,包含数据点“*”标记、折线图、平滑曲线图 %plot函数实例 x=[1,2,3,4,5,6]; y=[8,9,10,15,35,40]; plot(x,y,'*b');%绘制数据点"*"标记,且用蓝色标记 hold on %绘图叠加 plot(x,y)%绘制...
  • 曲线函数

    千次阅读 2018-11-29 18:49:36
    许多曲线函数在对象建模、动画轨迹的描述、数据和函数的图形化以及其他图形应用中是十分有用的。常见的曲线包括圆锥曲线、三角和指数函数、概率分布、通用多项式和样条函数。这些曲线的显示可采用类似于前面讨论的圆...
  • 易语言绘制过点平滑曲线源码例程程序调用GDI类的API函数,绘制绕过指定坐标点的平滑曲线
  • MATLAB绘制平滑曲线.doc

    2020-05-19 23:40:43
    - PAGE PAGE 3 欢迎下载 MATLAB... 以上是每一个X和Y对应的坐标请问如何编程能够绘制平滑曲线这个图形就像二次函数一样的 如果要在图中绘制一条直线加上y=70的直线用不同颜色区分 ?x=[0 0.1 0.16 0.27 0.41 0.48 0.59
  • 易语言源码易语言动态绘制平滑曲线源码.rar
  • 采用5点3次函数和7点3次函数实现的数据平滑法,可直接调用应用,已验证。采用C++实现。
  • 易语言绘制过点平滑曲线源码例程程序调用GDI类的API函数,绘制绕过指定坐标点的平滑曲线
  • 主要为大家详细介绍了python利用插值法对折线进行平滑曲线处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 曲线平滑曲线优化

    热门讨论 2011-11-24 20:06:54
    应用贝泽尔函数,用于优化曲线,是曲线平滑。 输入是原曲线上的一组点; 输出是优化后曲线上的一组点
  • QCustomPlot之平滑曲线上(八)

    千次阅读 热门讨论 2020-03-16 01:57:09
    文章目录一、生成平滑曲线二、drawLinePlot函数的修改 在QCustomPlot中,并没有为我们提供平滑曲线,所以需要我们改造它 注意:改造需要修改源码 注意:改造需要修改源码 注意:改造需要修改源码 一、生成平滑曲线 ...
  • 主要为大家详细介绍了python使用插值法画出平滑曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Smooth 函数 平滑处理函数 OpenCV

    千次阅读 2012-04-16 19:22:31
    OpenCV Smooth 函数 各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 ); src输入图像.dst输出图像....
  • 如何使用MATLAB绘制平滑曲线

    万次阅读 2013-07-26 05:56:12
    MATLAB中绘制平滑曲线一般使用最小二乘法或者B样条插值。  最小二乘法实际上是函数拟合,可以得到目标函数(这里为多项式)的系数,对outliers相对不敏感,缺点是需要预先设置目标函数的阶数,且有时不容易找到最优...
  • MATLAB绘制平滑曲线

    2012-05-06 16:15:19
    x=[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8]; y=[5 9 70 118 100 17 0 5]; y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8]; values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000); values2=spcrv([[x(1) x x(end)]...
  • matplotlib平滑曲线绘制

    千次阅读 2019-12-27 17:33:47
    但是有时候为了美观或者大致了解数据的波动情况,就需要将已有的折线图修改成更加平滑曲线。为了解决上述问题,我们首先从原理角度来介绍折现图转曲线图的相关理论。折现转曲线无非就是在已有折现图的数据基础上在...
  • matlab绘制平滑曲线

    千次阅读 2013-09-27 22:49:09
    以上是每一个X和Y对应的坐标,请问如何编程能够绘制平滑曲线,这个图形就像二次函数一样的 如果要在图中绘制一条直线加上y=70的直线,用不同颜色区分!   x=[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8]; y=[5 9 70 ...
  • 平滑曲线算法研究

    千次阅读 2012-06-02 00:27:58
    在绘图术语中样条是通过一组指定点集而生成平滑曲线的柔性带 。 术语 样条曲线 spline curve 绘制样条曲线的方法是给定一组称为控制点的坐标点,可以得到一条样条曲线。 样条曲线分为: 1 插值样条曲线...
  • Qt通过鼠标或者触屏,实时绘制平滑曲线,通常有两种方式实现:矢量绘图和非矢量绘图,这两种画线方式从实现上有些不同,其原理也不太一样,稍后会做详细介绍。而鼠标或者触屏画线也不大一样,通常如果只实现鼠标画线...
  • GDI绘制平滑曲线

    千次阅读 2012-04-12 10:39:04
    今天找绘制平滑曲线的方法,找来找去找不到 还试了传说中的贝塞尔样条曲线,发现不给力,对这个点的个数有要求,所以放弃!!搞了半天以为需要什么算法对点进行插值处理的,最后发现C#已经提供这样方法,一个函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,434
精华内容 10,173
关键字:

平滑曲线函数