Skip to main content
标签ad报错:该广告ID(9)不存在。
  主页 > Qt入门

一个qt/c++ demo,用于显示 Koch Curve(科赫曲线) 分形图

2023-04-24 浏览:
标签ad报错:该广告ID(7)不存在。

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsLineItem>
#include <QPainterPath>

// 递归绘制 Koch Curve
void drawKochCurve(QGraphicsScene *scene, QPointF p1, QPointF p2, int depth)
{
    if (depth == 0) {
        // 递归结束条件
        scene->addLine(p1.x(), -p1.y(), p2.x(), -p2.y());
    } else {
        // 计算三等分点
        QPointF delta = p2 - p1;
        QPointF pA = p1 + delta * (1.0 / 3.0);
        QPointF pB = p1 + delta * (2.0 / 3.0);

        // 计算中间点
        QPointF dir = p2 - p1;
        dir /= 3.0;
        QPointF pM = pA + QPointF(dir.y(), -dir.x());

        // 递归绘制
        drawKochCurve(scene, p1, pA, depth - 1);
        drawKochCurve(scene, pA, pM, depth - 1);
        drawKochCurve(scene, pM, pB, depth - 1);
        drawKochCurve(scene, pB, p2, depth - 1);
    }
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QGraphicsScene scene;
    QGraphicsView view(&scene);

    const QPointF p1(-200, 0);
    const QPointF p2(200, 0);
    drawKochCurve(&scene, p1, p2, 5);

    view.show();
    return app.exec();
}