环境搭建:
Qt 6.7.2 MSVC 2019 64bit
CMake latest
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Core Core5Compat DataVisualization)#executable(...) 之后target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::DataVisualization)
#Simple Lorenz System
class LorenzSystemTest {
public:LorenzSystemTest(double sigma, double rho, double beta): sigma(sigma), rho(rho), beta(beta) {}void step(double dt) {double dx = sigma * (y - x);double dy = x * (rho - z) - y;double dz = x * y - beta * z;x += dx * dt;y += dy * dt;z += dz * dt;}double x = 1.0, y = 1.0, z = 1.0; // 初始条件private:double sigma, rho, beta;
};
GTEST 验证及绘制(不考虑内存问题,仅作示例)
TEST(ChaoticSystemTest,LorenzScatterTest) {// 创建 3D 图表窗口Q3DScatter *scatter = new Q3DScatter();scatter->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);scatter->setFlags(scatter->flags() ^ Qt::FramelessWindowHint); // 显示窗口边框scatter->setAxisX(new QValue3DAxis);scatter->setAxisY(new QValue3DAxis);scatter->setAxisZ(new QValue3DAxis);scatter->axisX()->setTitle("X");scatter->axisY()->setTitle("Y");scatter->axisZ()->setTitle("Z");scatter->setTitle("Lorenz System - 3D View");// 创建数据系列QScatter3DSeries *series = new QScatter3DSeries;series->setItemLabelFormat("(@xLabel, @yLabel, @zLabel)");series->setMesh(QAbstract3DSeries::MeshPoint); // 设置点的形状series->setBaseColor(Qt::blue); // 设置点的颜色// 初始化 Lorenz SystemLorenzSystemTest lorenz(10.0, 28.0, 8.0 / 3.0); // 经典参数double dt = 0.01; // 时间步长int steps = 10000; // 总步数// 生成 Lorenz System 数据QScatterDataArray data;for (int i = 0; i < steps; ++i) {lorenz.step(dt);data << QVector3D(lorenz.x, lorenz.y, lorenz.z);}// 设置数据series->dataProxy()->addItems(data);scatter->addSeries(series);// 显示窗口scatter->resize(800, 600);scatter->show();
}
演示图: