CppQt3D-DataVisualization Simple LorenzSystem By Q3DScatter
环境搭建:
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 System
LorenzSystemTest 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();
}
演示图:


浙公网安备 33010602011771号