diff options
| author | 2008-10-08 16:31:24 -0400 | |
|---|---|---|
| committer | 2008-10-08 16:31:24 -0400 | |
| commit | 8df4bb880190deb3d6245d0eff5c52d7f62bf787 (patch) | |
| tree | 27f0483cf0b031e689277c822c152c08b35a71cc | |
| parent | Improve painting order. (diff) | |
| download | trianglefractalchaos-8df4bb880190deb3d6245d0eff5c52d7f62bf787.tar.xz trianglefractalchaos-8df4bb880190deb3d6245d0eff5c52d7f62bf787.zip | |
Optimized drawing code.
| -rw-r--r-- | TriangleFractalChaos.cpp | 38 | ||||
| -rw-r--r-- | TriangleFractalChaos.h | 5 |
2 files changed, 12 insertions, 31 deletions
diff --git a/TriangleFractalChaos.cpp b/TriangleFractalChaos.cpp index f6d6760..907b4d7 100644 --- a/TriangleFractalChaos.cpp +++ b/TriangleFractalChaos.cpp @@ -5,9 +5,6 @@ #include <QLabel> #include <QImage> #include <QTimer> -#include <QPixmap> -#include <cstdlib> -#include <QDebug> TriangleFractalChaos::TriangleFractalChaos(QWidget *parent) : QWidget(parent) @@ -49,18 +46,14 @@ void TriangleFractalChaos::toggleDraw() magnification->setEnabled(false); generate->setText("&Stop"); setFixedSize(size()); - int width, height; - if(this->width() < this->height()) { - width = this->width(); - height = qRound((double)width * 1.73205081 / 2.0); - } else { - width = this->height(); - height = qRound((double)width * 1.73205081 / 2.0); - } + int width = qMin(this->width(), this->height()); + int height = qRound((double)width * 1.73205081 / 2.0); int deltaWidthHalf = qRound(((double)(this->width() - width)) / 2.0) / magnification->value(); int deltaHeightHalf = qRound(((double)(this->height() - height)) / 2.0) / magnification->value(); width /= magnification->value(); height /= magnification->value(); + if(dots) + delete dots; dots = new QImage(size() / magnification->value(), QImage::Format_RGB32); dots->fill(backgroundColor); startingPoints[0] = QPoint(qRound((double)width / 2.0) - 1 + deltaWidthHalf, deltaHeightHalf); @@ -69,13 +62,11 @@ void TriangleFractalChaos::toggleDraw() dots->setPixel(startingPoints[0], 0xff00ff00); dots->setPixel(startingPoints[1], 0xff00ff00); dots->setPixel(startingPoints[2], 0xff00ff00); - int randomX = rand() % (width + 1); - int yStart = height - qRound((double)height / ((double)width / 2.0) * (double)randomX); - if(yStart < 0) yStart *= -1; - int randomY = (rand() % (height - yStart + 1)) + yStart; + int randomX = qrand() % (width + 1); + int yStart = qAbs(height - qRound((double)height / ((double)width / 2.0) * (double)randomX)); + int randomY = (qrand() % (height - yStart + 1)) + yStart; lastPoint = QPoint(randomX + deltaWidthHalf, randomY + deltaHeightHalf); dots->setPixel(lastPoint, 0xffff0000); - update(); drawTimer->start(delay->value()); } else { drawTimer->stop(); @@ -88,18 +79,11 @@ void TriangleFractalChaos::toggleDraw() setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); } } -void TriangleFractalChaos::paintEvent(QPaintEvent *event) -{ - if(dots) { - QPalette palette; - palette.setBrush(backgroundRole(), QBrush(QPixmap::fromImage(dots->scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)))); - setPalette(palette); - } - QWidget::paintEvent(event); -} void TriangleFractalChaos::drawDot() { - lastPoint = (lastPoint + startingPoints[rand() % 3]) / 2; + lastPoint = (lastPoint + startingPoints[qrand() % 3]) / 2; dots->setPixel(lastPoint, 0xff000000); - update(); + QPalette palette; + palette.setBrush(backgroundRole(), dots->scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + setPalette(palette); }
\ No newline at end of file diff --git a/TriangleFractalChaos.h b/TriangleFractalChaos.h index 5268e52..87c74d6 100644 --- a/TriangleFractalChaos.h +++ b/TriangleFractalChaos.h @@ -1,10 +1,10 @@ #include <QWidget> +#include <QPoint> class QTimer; class QSpinBox; class QLabel; class QPushButton; class QImage; -class QPoint; class TriangleFractalChaos : public QWidget { @@ -12,9 +12,6 @@ class TriangleFractalChaos : public QWidget public: TriangleFractalChaos(QWidget *parent = 0); - -protected: - void paintEvent(QPaintEvent *event); private: QSpinBox *magnification; |
