#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QPen>
// 计算边长为size、中心点为(centerX, centerY)、角度为angle的正三角形的三个顶点
void calculateTriangle(double centerX, double centerY, double size, double angle, QPointF &p1, QPointF &p2, QPointF &p3)
{
double r = size * qSqrt(3) / 6.0; // 正三角形外接圆半径
double x1 = centerX + r * qSin(angle);
double y1 = centerY - r * qCos(angle);
double x2 = centerX + r * qSin(angle + 2.0 / 3.0 * M_PI);
double y2 = centerY - r * qCos(angle + 2.0 / 3.0 * M_PI);
double x3 = centerX + r * qSin(angle + 4.0 / 3.0 * M_PI);
double y3 = centerY - r * qCos(angle + 4.0 / 3.0 * M_PI);
p1.setX(x1);
p1.setY(y1);
p2.setX(x2);
p2.setY(y2);
p3.setX(x3);
p3.setY(y3);
}
// 递归生成 Serpinski Polygon 分型图
void generateSerpinskiPolygon(QGraphicsScene &scene, QPointF center, double size, double angle, int depth)
{
if (depth == 0) { // 达到深度限制,停止递归
return;
}
QPen pen;
pen.setColor(Qt::GlobalColor::darkGreen); // 设置颜色
QPointF p1, p2, p3;
calculateTriangle(center.x(), center.y(), size, angle, p1, p2, p3);
// 绘制三角形
scene.addLine(p1.x(), p1.y(), p2.x(), p2.y(), pen);
scene.addLine(p2.x(), p2.y(), p3.x(), p3.y(), pen);
scene.addLine(p3.x(), p3.y(), p1.x(), p1.y(), pen);
// 继续递归生成子级 Serpinski Polygon 分型图
QPointF newCenter = (p1 + p2 + p3) / 3.0; // 重心坐标
double newSize = size / 2.0;
generateSerpinskiPolygon(scene, newCenter, newSize, angle, depth - 1); // 顶部子级
generateSerpinskiPolygon(scene, newCenter, newSize, angle + M_PI / 3.0, depth - 1); // 左下角子级
generateSerpinskiPolygon(scene, newCenter, newSize, angle - M_PI / 3.0, depth - 1); // 右下角子级
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
QPointF center(200, 200); // 中心点位置
double size = 400; // 初始大小
double angle = 0; // 初始角度
int depth = 6; // 深度
generateSerpinskiPolygon(scene, center, size, angle, depth);
view.show();
return app.exec();
}
一个qt/c++ demo,用于显示 Serpinski Polygon(谢尔宾斯基多边形) 分形图
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瀑布图的控件效果
浏览: 1097
-
一个qt/c++ demo,用于显示分星图
浏览: 1015