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

一个qt/c++ demo,用于显示 Terdragon Curve(三头龙曲线) 分形图

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

#include <QtWidgets>
#include <QPainter>

class TerdragonCurve : public QWidget {
public:
    TerdragonCurve(QWidget *parent = nullptr) : QWidget(parent) {

        QPixmap pixmap("https://upload.wikimedia.org/wikipedia/commons/thumb/9/90/Terdragon_curve_3d.jpg/220px-Terdragon_curve_3d.jpg");

        setFixedSize(600, 600);
        setWindowTitle("Terdragon Curve(三头龙曲线)");

        image = QImage(size(), QImage::Format_RGB32);
        image.fill(Qt::white);

        drawTerdragonCurve();

        label = new QLabel(this);
        label->setPixmap(pixmap.scaledToWidth(400));
        label->move(100, 450);
    }

private:
    QImage image;
    QLabel* label;

    void drawTerdragonCurve(int n = 10, double size = 200.0, double x = 50.0, double y = 300.0, double angle = 0.0) {
        if (n == 0) {
            return;
        }

        double x1 = x + size * cos(angle);
        double y1 = y - size * sin(angle);

        double x2 = x1 + size * cos(angle + M_PI / 3);
        double y2 = y1 - size * sin(angle + M_PI / 3);

        double x3 = x2 + size * cos(angle - M_PI / 3);
        double y3 = y2 - size * sin(angle - M_PI / 3);

        drawTerdragonCurve(n - 1, size / sqrt(3.0), x, y, angle);
        drawTerdragonCurve(n - 1, size / sqrt(3.0), x1, y1, angle + M_PI / 3);
        drawTerdragonCurve(n - 1, size / sqrt(3.0), x2, y2, angle - M_PI / 3);
        drawTerdragonCurve(n - 1, size / sqrt(3.0), x3, y3, angle);
        
        QPainter painter(&image);
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setPen(Qt::black);
        painter.drawLine(x, y, x1, y1);
        painter.drawLine(x1, y1, x2, y2);
        painter.drawLine(x2, y2, x3, y3);
        painter.drawLine(x3, y3, x, y);
    }

    void paintEvent(QPaintEvent* /* event */) {
        QPainter painter(this);

        painter.drawImage(0, 0, image);

        painter.end();
    }
};

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

    TerdragonCurve window;
    window.show();

    return app.exec();
}