From 982ee4484039c294274a76da37bc7fcad4157dfc Mon Sep 17 00:00:00 2001 From: feiyangqingyun Date: Mon, 8 Mar 2021 09:26:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B9=B3=E6=BB=91=E6=9B=B2?= =?UTF-8?q?=E7=BA=BFdemo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0snap/smoothcurve.png | Bin 0 -> 58793 bytes QWidgetDemo.pro | 1 + README.md | 4 +- smoothcurve/frmsmoothcurve.cpp | 68 +++++++++++++++++++++++ smoothcurve/frmsmoothcurve.h | 31 +++++++++++ smoothcurve/frmsmoothcurve.ui | 62 +++++++++++++++++++++ smoothcurve/main.cpp | 31 +++++++++++ smoothcurve/smoothcurve.cpp | 96 +++++++++++++++++++++++++++++++++ smoothcurve/smoothcurve.h | 27 ++++++++++ smoothcurve/smoothcurve.pro | 23 ++++++++ 10 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 0snap/smoothcurve.png create mode 100644 smoothcurve/frmsmoothcurve.cpp create mode 100644 smoothcurve/frmsmoothcurve.h create mode 100644 smoothcurve/frmsmoothcurve.ui create mode 100644 smoothcurve/main.cpp create mode 100644 smoothcurve/smoothcurve.cpp create mode 100644 smoothcurve/smoothcurve.h create mode 100644 smoothcurve/smoothcurve.pro diff --git a/0snap/smoothcurve.png b/0snap/smoothcurve.png new file mode 100644 index 0000000000000000000000000000000000000000..c12cb555f14a076d0231d3aeab031c598b7e4ab6 GIT binary patch literal 58793 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
?${IY5v{i-DM@XACJU{G+{TaD}EIPr?^$`{rXG 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

KLHhDpN#RvCM?o@zzF_Eez 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 z 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 F_Add^<-q^| literal 0 HcmV?d00001 diff --git a/QWidgetDemo.pro b/QWidgetDemo.pro index 881835d..3e8dc6d 100644 --- a/QWidgetDemo.pro +++ b/QWidgetDemo.pro @@ -35,6 +35,7 @@ SUBDIRS += screenwidget #屏幕截图控件 SUBDIRS += imageswitch #图片开关控件 SUBDIRS += netserver #网络中转服务器 SUBDIRS += base64 #图片文字base64互换 +SUBDIRS += smoothcurve #平滑曲线 win32 { SUBDIRS += ffmpegdemo #视频流播放ffmpeg内核 diff --git a/README.md b/README.md index 3a0e5d8..849837a 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ | 40 | mpvdemo | 视频流播放mpv内核 | | 41 | miniblink | miniblink示例 | | 42 | base64 | 图片文字base64互换 | +| 43 | smoothcurve | 平滑曲线 | ### 二、学习群 1. **Qt交流大会群 853086607(雨田哥)** @@ -96,4 +97,5 @@ ![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/netserver.jpg) ![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/designer.png) ![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/miniblink.jpg) -![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/base64.png) \ No newline at end of file +![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/base64.png) +![avatar](https://gitee.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/smoothcurve.png) \ No newline at end of file diff --git a/smoothcurve/frmsmoothcurve.cpp b/smoothcurve/frmsmoothcurve.cpp new file mode 100644 index 0000000..ffb9599 --- /dev/null +++ b/smoothcurve/frmsmoothcurve.cpp @@ -0,0 +1,68 @@ +#include "frmsmoothcurve.h" +#include "ui_frmsmoothcurve.h" +#include "smoothcurve.h" +#include "qpainter.h" +#include "qdatetime.h" +#include "qdebug.h" + +frmSmoothCurve::frmSmoothCurve(QWidget *parent) : QWidget(parent), ui(new Ui::frmSmoothCurve) +{ + ui->setupUi(this); + + //初始化随机数种子 + qsrand(QDateTime::currentDateTime().toMSecsSinceEpoch()); + + //随机生成曲线上的点 + int x = -300; + while (x < 300) { + datas << QPointF(x, qrand() % 300 - 100); + x += qMin(qrand() % 30 + 5, 300); + } + + //根据曲线上的点创建平滑曲线 + smoothCurve = SmoothCurve::createSmoothCurve(datas); + + // 直接连接点的创建非平滑曲线曲线 + smoothCurve2.moveTo(datas[0]); + for (int i = 1; i < datas.size(); ++i) { + smoothCurve2.lineTo(datas[i]); + } + + connect(ui->showKnotsCheckBox, SIGNAL(clicked(bool)), this, SLOT(update())); + connect(ui->showSmoothCurveCheckBox, SIGNAL(clicked(bool)), this, SLOT(update())); +} + +frmSmoothCurve::~frmSmoothCurve() +{ + delete ui; +} + +void frmSmoothCurve::paintEvent(QPaintEvent *) +{ + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.translate(width() / 2, height() / 2); + painter.scale(1, -1); + + //画坐标轴 + painter.setPen(QColor(180, 180, 180)); + painter.drawLine(-250, 0, 250, 0); + painter.drawLine(0, 150, 0, -150); + + //被选中时显示平滑曲线,否则显示非平滑曲线 + painter.setPen(QPen(QColor(80, 80, 80), 2)); + if (ui->showSmoothCurveCheckBox->isChecked()) { + painter.drawPath(smoothCurve); + } else { + painter.drawPath(smoothCurve2); + } + + //如果曲线上的点可见则显示出来 + if (ui->showKnotsCheckBox->isChecked()) { + painter.setPen(Qt::black); + painter.setBrush(Qt::gray); + foreach (QPointF p, datas) { + painter.drawEllipse(p, 3, 3); + } + } +} diff --git a/smoothcurve/frmsmoothcurve.h b/smoothcurve/frmsmoothcurve.h new file mode 100644 index 0000000..8639013 --- /dev/null +++ b/smoothcurve/frmsmoothcurve.h @@ -0,0 +1,31 @@ +#ifndef FRMSMOOTHCURVE_H +#define FRMSMOOTHCURVE_H + +#include +#include +#include +#include + +namespace Ui { +class frmSmoothCurve; +} + +class frmSmoothCurve : public QWidget +{ + Q_OBJECT + +public: + explicit frmSmoothCurve(QWidget *parent = 0); + ~frmSmoothCurve(); + +protected: + void paintEvent(QPaintEvent *event); + +private: + Ui::frmSmoothCurve *ui; + QVector datas; //曲线上的点 + QPainterPath smoothCurve; //平滑曲线 + QPainterPath smoothCurve2; //直接连接点的非平滑曲线 +}; + +#endif // FRMSMOOTHCURVE_H diff --git a/smoothcurve/frmsmoothcurve.ui b/smoothcurve/frmsmoothcurve.ui new file mode 100644 index 0000000..324b8b1 --- /dev/null +++ b/smoothcurve/frmsmoothcurve.ui @@ -0,0 +1,62 @@ + + + frmSmoothCurve + + + + 0 + 0 + 714 + 523 + + + + Widget + + + + + + Qt::Vertical + + + + 20 + 473 + + + + + + + + 显示坐标点 + + + + + + + Qt::Horizontal + + + + 549 + 20 + + + + + + + + 平滑 + + + + + + + + + diff --git a/smoothcurve/main.cpp b/smoothcurve/main.cpp new file mode 100644 index 0000000..f3c23d9 --- /dev/null +++ b/smoothcurve/main.cpp @@ -0,0 +1,31 @@ +#pragma execution_character_set("utf-8") + +#include "frmsmoothcurve.h" +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setFont(QFont("Microsoft Yahei", 9)); + +#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + frmSmoothCurve w; + w.setWindowTitle("平滑曲线"); + w.show(); + + return a.exec(); +} diff --git a/smoothcurve/smoothcurve.cpp b/smoothcurve/smoothcurve.cpp new file mode 100644 index 0000000..fe20c5e --- /dev/null +++ b/smoothcurve/smoothcurve.cpp @@ -0,0 +1,96 @@ +#include "smoothcurve.h" + +QPainterPath SmoothCurve::createSmoothCurve(const QVector &points) +{ + QPainterPath path; + int len = points.size(); + if (len < 2) { + return path; + } + + QVector firstControlPoints; + QVector secondControlPoints; + calculateControlPoints(points, &firstControlPoints, &secondControlPoints); + path.moveTo(points[0].x(), points[0].y()); + + for (int i = 0; i < len - 1; ++i) { + path.cubicTo(firstControlPoints[i], secondControlPoints[i], points[i + 1]); + } + + return path; +} + +void SmoothCurve::calculateFirstControlPoints(double *&result, const double *rhs, int n) +{ + result = new double[n]; + double *tmp = new double[n]; + double b = 2.0; + result[0] = rhs[0] / b; + + for (int i = 1; i < n; i++) { + tmp[i] = 1 / b; + b = (i < n - 1 ? 4.0 : 3.5) - tmp[i]; + result[i] = (rhs[i] - result[i - 1]) / b; + } + + for (int i = 1; i < n; i++) { + result[n - i - 1] -= tmp[n - i] * result[n - i]; + } + + delete tmp; +} + +void SmoothCurve::calculateControlPoints(const QVector &datas, + QVector *firstControlPoints, + QVector *secondControlPoints) +{ + int n = datas.size() - 1; + for (int i = 0; i < n; ++i) { + firstControlPoints->append(QPointF()); + secondControlPoints->append(QPointF()); + } + + if (n == 1) { + (*firstControlPoints)[0].rx() = (2 * datas[0].x() + datas[1].x()) / 3; + (*firstControlPoints)[0].ry() = (2 * datas[0].y() + datas[1].y()) / 3; + (*secondControlPoints)[0].rx() = 2 * (*firstControlPoints)[0].x() - datas[0].x(); + (*secondControlPoints)[0].ry() = 2 * (*firstControlPoints)[0].y() - datas[0].y(); + return; + } + + double *xs = 0; + double *ys = 0; + double *rhsx = new double[n]; + double *rhsy = new double[n]; + + for (int i = 1; i < n - 1; ++i) { + rhsx[i] = 4 * datas[i].x() + 2 * datas[i + 1].x(); + rhsy[i] = 4 * datas[i].y() + 2 * datas[i + 1].y(); + } + + rhsx[0] = datas[0].x() + 2 * datas[1].x(); + rhsx[n - 1] = (8 * datas[n - 1].x() + datas[n].x()) / 2.0; + rhsy[0] = datas[0].y() + 2 * datas[1].y(); + rhsy[n - 1] = (8 * datas[n - 1].y() + datas[n].y()) / 2.0; + + calculateFirstControlPoints(xs, rhsx, n); + calculateFirstControlPoints(ys, rhsy, n); + + for (int i = 0; i < n; ++i) { + (*firstControlPoints)[i].rx() = xs[i]; + (*firstControlPoints)[i].ry() = ys[i]; + + if (i < n - 1) { + (*secondControlPoints)[i].rx() = 2 * datas[i + 1].x() - xs[i + 1]; + (*secondControlPoints)[i].ry() = 2 * datas[i + 1].y() - ys[i + 1]; + } else { + (*secondControlPoints)[i].rx() = (datas[n].x() + xs[n - 1]) / 2; + (*secondControlPoints)[i].ry() = (datas[n].y() + ys[n - 1]) / 2; + } + } + + delete xs; + delete ys; + delete rhsx; + delete rhsy; +} diff --git a/smoothcurve/smoothcurve.h b/smoothcurve/smoothcurve.h new file mode 100644 index 0000000..6f69071 --- /dev/null +++ b/smoothcurve/smoothcurve.h @@ -0,0 +1,27 @@ +#ifndef SMOOTHCURVE_H +#define SMOOTHCURVE_H + +#include +#include +#include +#include + +#ifdef quc +class Q_DECL_EXPORT SmoothCurve : public QObject +#else +class SmoothCurve : public QObject +#endif + +{ +public: + //创建平滑曲线路径 + static QPainterPath createSmoothCurve(const QVector &points); + +private: + static void calculateFirstControlPoints(double *&result, const double *rhs, int n); + static void calculateControlPoints(const QVector &datas, + QVector *firstControlPoints, + QVector *secondControlPoints); +}; + +#endif // SMOOTHCURVE_H diff --git a/smoothcurve/smoothcurve.pro b/smoothcurve/smoothcurve.pro new file mode 100644 index 0000000..3a70bfe --- /dev/null +++ b/smoothcurve/smoothcurve.pro @@ -0,0 +1,23 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2017-01-09T09:29:12 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = smoothcurve +TEMPLATE = app +DESTDIR = $$PWD/../bin +CONFIG += warn_off + +SOURCES += main.cpp +SOURCES += frmsmoothcurve.cpp +SOURCES += smoothcurve.cpp + +HEADERS += frmsmoothcurve.h +HEADERS += smoothcurve.h + +FORMS += frmsmoothcurve.ui