diff options
Diffstat (limited to 'TriangleFractalChaos.cpp')
| -rw-r--r-- | TriangleFractalChaos.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/TriangleFractalChaos.cpp b/TriangleFractalChaos.cpp new file mode 100644 index 0000000..daa3bd0 --- /dev/null +++ b/TriangleFractalChaos.cpp @@ -0,0 +1,92 @@ +#include "TriangleFractalChaos.h" +#include <QPushButton> +#include <QSpinBox> +#include <QGridLayout> +#include <QLabel> +#include <QImage> +#include <QTimer> +#include <QPixmap> +#include <cstdlib> + +TriangleFractalChaos::TriangleFractalChaos(QWidget *parent) + : QWidget(parent) +{ + dots = 0; + drawTimer = new QTimer(this); + connect(drawTimer, SIGNAL(timeout()), this, SLOT(drawDot())); + delayLabel = new QLabel("Delay:"); + magnificationLabel = new QLabel("Magnification:"); + delay = new QSpinBox; + delay->setMinimum(1); + delay->setValue(10); + delay->setSuffix(" ms"); + magnification = new QSpinBox; + magnification->setMinimum(1); + magnification->setMaximum(10); + magnification->setValue(2); + magnification->setSuffix("x"); + generate = new QPushButton("&Generate!"); + connect(generate, SIGNAL(clicked()), this, SLOT(toggleDraw())); + QGridLayout *grid = new QGridLayout; + grid->setAlignment(Qt::AlignLeft | Qt::AlignTop); + grid->addWidget(delayLabel, 0, 0, Qt::AlignRight); + grid->addWidget(delay, 0, 1); + grid->addWidget(magnificationLabel, 1, 0, Qt::AlignRight); + grid->addWidget(magnification, 1, 1); + grid->addWidget(generate, 2, 0, 1, 2); + setLayout(grid); + resize(500, 500); + setWindowTitle("Triangle Fractal Chaos"); +} +void TriangleFractalChaos::toggleDraw() +{ + static uint backgroundColor = palette().color(QPalette::Window).rgb(); + if(delayLabel->isEnabled()) { + delayLabel->setEnabled(false); + delay->setEnabled(false); + magnificationLabel->setEnabled(false); + magnification->setEnabled(false); + generate->setText("&Stop"); + setFixedSize(size()); + int width = this->width(); + int height = (int)((double)width * 1.73205081 / 2.0); + width /= (int)magnification->value(); + height /= (int)magnification->value(); + dots = new QImage(width, height, QImage::Format_RGB32); + dots->fill(backgroundColor); + startingPoints[0] = QPoint(width / 2 - 1, 0); + startingPoints[1] = QPoint(0, height - 1); + startingPoints[2] = QPoint(width - 1, height - 1); + dots->setPixel(startingPoints[0], 0xff00ff00); + dots->setPixel(startingPoints[1], 0xff00ff00); + dots->setPixel(startingPoints[2], 0xff00ff00); + lastPoint = QPoint(rand() % width + 1, rand() % height + 1); + dots->setPixel(lastPoint, 0xffff0000); + update(); + drawTimer->start(delay->value()); + } else { + drawTimer->stop(); + delayLabel->setEnabled(true); + delay->setEnabled(true); + magnificationLabel->setEnabled(true); + magnification->setEnabled(true); + generate->setText("&Generate!"); + setMinimumSize(0, 0); + setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + } +} +void TriangleFractalChaos::paintEvent(QPaintEvent *event) +{ + QWidget::paintEvent(event); + if(dots) { + QPalette palette; + palette.setBrush(backgroundRole(), QBrush(QPixmap::fromImage(dots->scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)))); + setPalette(palette); + } +} +void TriangleFractalChaos::drawDot() +{ + lastPoint = (lastPoint + startingPoints[rand() % 3]) / 2; + dots->setPixel(lastPoint, 0xff000000); + update(); +}
\ No newline at end of file |
