aboutsummaryrefslogtreecommitdiffhomepage
path: root/demos/mandelbrot/mandelbrot.h
diff options
context:
space:
mode:
Diffstat (limited to 'demos/mandelbrot/mandelbrot.h')
-rw-r--r--demos/mandelbrot/mandelbrot.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/demos/mandelbrot/mandelbrot.h b/demos/mandelbrot/mandelbrot.h
new file mode 100644
index 000000000..de09a1ffb
--- /dev/null
+++ b/demos/mandelbrot/mandelbrot.h
@@ -0,0 +1,47 @@
+#ifndef MANDELBROT_H
+#define MANDELBROT_H
+
+#include <Eigen/Array>
+#include <QtGui/QApplication>
+#include <QtGui/QWidget>
+
+#ifdef REAL
+typedef REAL real;
+#else
+typedef float real;
+#endif
+
+enum { packetSize = Eigen::ei_packet_traits<real>::size }; // number of reals in a packet
+typedef Eigen::Matrix<real, packetSize, 1> packet; // wrap a packet as a vector
+typedef Eigen::Matrix<real, 2, 1> vector2; // really just a complex number, but we're here to demo Eigen !
+
+const int iter = 32; // the maximum number of iterations done per pixel. Must be a multiple of 4.
+
+class MandelbrotWidget : public QWidget
+{
+ Q_OBJECT
+
+ vector2 center;
+ real xradius;
+ int size;
+ unsigned char *buffer;
+ QPoint lastpos;
+
+ protected:
+ void resizeEvent(QResizeEvent *);
+ void paintEvent(QPaintEvent *);
+ void mousePressEvent(QMouseEvent *event);
+ void mouseMoveEvent(QMouseEvent *event);
+
+ public:
+ MandelbrotWidget() : QWidget(), center(real(0),real(0)), xradius(2),
+ size(0), buffer(0)
+ {
+ setAutoFillBackground(false);
+ setWindowTitle(QString("Mandelbrot/Eigen, sizeof(real)=")+QString::number(sizeof(real))
+ +", sizeof(packet)="+QString::number(sizeof(packet)));
+ }
+ ~MandelbrotWidget() { if(buffer) delete[]buffer; }
+};
+
+#endif // MANDELBROT_H \ No newline at end of file