1、概述
源碼放在文章末尾
該項目實現了通過貝塞爾曲線畫波浪動畫,可控制 顏色+密度+速度+加速度
安裝與運行環境
語言:C++
框架:Qt 11.3
平臺:Windows
將屏幕水平平均分為10塊,在一定范圍內隨機高度的12個點(左右出頭),通過貝塞爾曲線連接連續的點,即可繪制成一段段連續的波浪。
但是每兩端波浪都會有折線凸起,根據貝塞爾曲線的原理,兩個控制點中點作為新的控制點,原來的兩點連線即為該控制點在新曲線上的切線,這樣既可繪制成只由三個控制點影響的B樣條。
為了逼真,通過時鐘以及大量狀態機確定隨機范圍,例如在某一段時間整體偏下方,某一段時間整體偏上方,模仿大自然水面潮漲潮落。
項目demo演示如下所示:
項目部分代碼如下所示:
創建:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{bw1 = new BezierWaveBean(this);bw1->set_offsety(geometry().height()/20); // 垂直偏移位置【可選】bw1->set_speedx(4); // 設置速度bw1->start();
}
繪制:
void MainWindow::paintEvent(QPaintEvent *e)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true); // 抗鋸齒painter.fillPath(bw1->getPainterPath(painter), QColor(255, 0, 0, 50));return QMainWindow::paintEvent(e);
}
尺寸:
void MainWindow::resizeEvent(QResizeEvent *e)
{bw1->set_rect(geometry());return QMainWindow::resizeEvent(e);
}
開關:
bw1->start(); // 開始
bw1->pause(); // 暫停
bw1->resume(); // 繼續