#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QVector>
#include <QPoint>
// 生成 Menger Sponge 的点集
void generateMengerSponge(QVector<QVector3D> &points, const QVector3D ¢er, qreal size, int depth)
{
if (depth == 0) { // 递归终止条件
return;
}
// 计算子块大小、中心位置及相应缩放比例
qreal childSize = size / 3.0;
qreal childScale = childSize / size;
QVector3D childCenter;
// 生成 27 个子块并添加到点集中
for (int z = -1; z <= 1; ++z) {
for (int y = -1; y <= 1; ++y) {
for (int x = -1; x <= 1; ++x) {
if (qAbs(x) + qAbs(y) + qAbs(z) > 1) { // 留下中心立方体的 20 个子块
continue;
}
childCenter.setX(center.x() + x * childSize);
childCenter.setY(center.y() + y * childSize);
childCenter.setZ(center.z() + z * childSize);
points.append(childCenter);
// 递归生成子块
generateMengerSponge(points, childCenter, childSize, depth - 1);
}
}
}
}
// 将 Menger Sponge 的点集转换为线段集
void pointsToSegments(QGraphicsScene *scene, const QVector<QVector3D> &points, qreal size)
{
QVector<QPoint> segments;
for (int i = 0; i < points.size(); ++i) {
for (int j = i+1; j < points.size(); ++j) {
if (qFuzzyCompare(points[i].distanceToPoint(points[j]), size)) {
segments.append(QPoint(i, j));
}
}
}
// 将线段添加到场景中
for (const auto &segment : segments) {
const QVector3D &start = points[segment.x()];
const QVector3D &end = points[segment.y()];
scene->addLine(start.x(), start.y(), end.x(), end.y());
}
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
const qreal size = 300.0;
const QVector3D center(400.0, 400.0, 400.0);
QVector<QVector3D> points;
points.append(center);
generateMengerSponge(points, center, size, 3);
pointsToSegments(&scene, points, size);
view.show();
return app.exec();
}
一个qt/c++ demo,用于显示 Menger Sponge(曼戈尔海绵) 分形图
2023-04-24 浏览:
标签ad报错:该广告ID(7)不存在。
- 热门标签
-
- 最新发布
-
- Qt 信号槽与原编译系统(2024-06-04)
- Qt信号槽关联中使用普通变量关联(包含不修改和修改槽内数据两种)、使用引用变量关联对(2023-05-05)
- 一个qt/c++ demo,用于显示 Koch Snowflake (科赫雪花) 分(2023-04-24)
- 一个qt/c++ demo,用于显示 Peano Curve(皮亚诺曲线) 分形图(2023-04-24)
- 一个qt/c++ demo,用于显示 Apollonian Gasket(阿波罗尼恩(2023-04-24)
- 一个qt/c++ demo,用于显示 Terdragon Curve(三头龙曲线)(2023-04-24)
- 一个qt/c++ demo,用于显示 Spiral Fractal(螺旋分形) 分形(2023-04-24)
- 一个qt/c++ demo,用于显示 Sierpinski Tetrahedron((2023-04-24)
- 一个qt/c++ demo,用于显示 Gasket Fractal(镂垫分形) 分(2023-04-24)
- 一个qt/c++ demo,用于显示 Hexagonal Gosper Curve(2023-04-24)
- 半年热点
-
-
一个Qt/C++ Demo,用于实现一个用于显示3D瀑布图的控件效果
浏览: 1067
-
一个qt/c++ demo,用于显示分星图
浏览: 1005