Mandelbrot set generator using DISCO-F746NG.
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed BUTTON_GROUP
Mandelbrot/mandelbrot.hpp@6:cafbcdf0d166, 2016-02-22 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Feb 22 13:51:42 2016 +0000
- Revision:
- 6:cafbcdf0d166
- Parent:
- 2:6c1471e4a4b1
7
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:9a78f27b84a4 | 1 | //------------------------------------------------------ |
MikamiUitOpen | 0:9a78f27b84a4 | 2 | // Class for drawing Mandelbrot set -- Header |
MikamiUitOpen | 0:9a78f27b84a4 | 3 | // 2015/11/03, Copyright (c) 2015 MIKAMI, Naoki |
MikamiUitOpen | 0:9a78f27b84a4 | 4 | //----------------------------------------------------------- |
MikamiUitOpen | 0:9a78f27b84a4 | 5 | |
MikamiUitOpen | 0:9a78f27b84a4 | 6 | #ifndef F746_MANDELBROT_HPP |
MikamiUitOpen | 0:9a78f27b84a4 | 7 | #define F746_MANDELBROT_HPP |
MikamiUitOpen | 0:9a78f27b84a4 | 8 | |
MikamiUitOpen | 0:9a78f27b84a4 | 9 | #include "mbed.h" |
MikamiUitOpen | 0:9a78f27b84a4 | 10 | #include "TS_DISCO_F746NG.h" |
MikamiUitOpen | 0:9a78f27b84a4 | 11 | #include "LCD_DISCO_F746NG.h" |
MikamiUitOpen | 0:9a78f27b84a4 | 12 | #include <complex> // requisite for complex |
MikamiUitOpen | 0:9a78f27b84a4 | 13 | typedef complex<float> Complex; // define "Complex" |
MikamiUitOpen | 0:9a78f27b84a4 | 14 | |
MikamiUitOpen | 0:9a78f27b84a4 | 15 | namespace Mikami |
MikamiUitOpen | 0:9a78f27b84a4 | 16 | { |
MikamiUitOpen | 0:9a78f27b84a4 | 17 | // Base class of Mandelbrot set drawer |
MikamiUitOpen | 0:9a78f27b84a4 | 18 | class MandelbrotBase |
MikamiUitOpen | 0:9a78f27b84a4 | 19 | { |
MikamiUitOpen | 0:9a78f27b84a4 | 20 | public: |
MikamiUitOpen | 0:9a78f27b84a4 | 21 | // Constructor |
MikamiUitOpen | 0:9a78f27b84a4 | 22 | MandelbrotBase(LCD_DISCO_F746NG &lcd, |
MikamiUitOpen | 0:9a78f27b84a4 | 23 | int x0, int y0, int width, int height, int maxCount) |
MikamiUitOpen | 0:9a78f27b84a4 | 24 | : LCD_(&lcd), X0_(x0), Y0_(y0), NX_(width), NY_(height), |
MikamiUitOpen | 0:9a78f27b84a4 | 25 | MAX_COUNT_(maxCount) {} |
MikamiUitOpen | 0:9a78f27b84a4 | 26 | |
MikamiUitOpen | 0:9a78f27b84a4 | 27 | void Display(float x1, float x2, float y1, float y2); |
MikamiUitOpen | 0:9a78f27b84a4 | 28 | |
MikamiUitOpen | 0:9a78f27b84a4 | 29 | // translate position in the screen to real coordinate value |
MikamiUitOpen | 0:9a78f27b84a4 | 30 | float Fx(int x) { return ax_*x + x1_; } |
MikamiUitOpen | 0:9a78f27b84a4 | 31 | float Fy(int y) { return ay_*y + y1_; } |
MikamiUitOpen | 0:9a78f27b84a4 | 32 | |
MikamiUitOpen | 0:9a78f27b84a4 | 33 | protected: |
MikamiUitOpen | 0:9a78f27b84a4 | 34 | // limit maximum value to 255 |
MikamiUitOpen | 0:9a78f27b84a4 | 35 | int Max255(int n) { return (n > 255) ? 255 : n; } |
MikamiUitOpen | 0:9a78f27b84a4 | 36 | |
MikamiUitOpen | 0:9a78f27b84a4 | 37 | private: |
MikamiUitOpen | 0:9a78f27b84a4 | 38 | LCD_DISCO_F746NG *const LCD_; |
MikamiUitOpen | 0:9a78f27b84a4 | 39 | const int X0_; // origin of x axis |
MikamiUitOpen | 0:9a78f27b84a4 | 40 | const int Y0_; // origin of y axis |
MikamiUitOpen | 0:9a78f27b84a4 | 41 | const int NX_; // number of pixels for horizon |
MikamiUitOpen | 0:9a78f27b84a4 | 42 | const int NY_; // number of pixels for vertical |
MikamiUitOpen | 0:9a78f27b84a4 | 43 | const int MAX_COUNT_; |
MikamiUitOpen | 0:9a78f27b84a4 | 44 | |
MikamiUitOpen | 0:9a78f27b84a4 | 45 | float x1_, y1_; |
MikamiUitOpen | 0:9a78f27b84a4 | 46 | float ax_, ay_; |
MikamiUitOpen | 0:9a78f27b84a4 | 47 | |
MikamiUitOpen | 0:9a78f27b84a4 | 48 | // Get the color corresponding to the number of repititions |
MikamiUitOpen | 0:9a78f27b84a4 | 49 | virtual uint32_t GetColor(int x) = 0; |
MikamiUitOpen | 0:9a78f27b84a4 | 50 | |
MikamiUitOpen | 0:9a78f27b84a4 | 51 | float Sqr(float x) { return x*x; } |
MikamiUitOpen | 0:9a78f27b84a4 | 52 | |
MikamiUitOpen | 0:9a78f27b84a4 | 53 | // discrimination of congergence |
MikamiUitOpen | 0:9a78f27b84a4 | 54 | int Converge(Complex c); |
MikamiUitOpen | 0:9a78f27b84a4 | 55 | }; |
MikamiUitOpen | 0:9a78f27b84a4 | 56 | |
MikamiUitOpen | 0:9a78f27b84a4 | 57 | // Derived class of Mandelbrot set drawer to draw black and white pattern |
MikamiUitOpen | 0:9a78f27b84a4 | 58 | class MandelbrotBW : public MandelbrotBase |
MikamiUitOpen | 0:9a78f27b84a4 | 59 | { |
MikamiUitOpen | 0:9a78f27b84a4 | 60 | public: |
MikamiUitOpen | 0:9a78f27b84a4 | 61 | MandelbrotBW(LCD_DISCO_F746NG &lcd, |
MikamiUitOpen | 0:9a78f27b84a4 | 62 | int x0, int y0, int width, int height, int maxCount = 100) |
MikamiUitOpen | 0:9a78f27b84a4 | 63 | : MandelbrotBase(lcd, x0, y0, width, height, maxCount) {} |
MikamiUitOpen | 0:9a78f27b84a4 | 64 | |
MikamiUitOpen | 0:9a78f27b84a4 | 65 | // converge: black, diverge: white |
MikamiUitOpen | 0:9a78f27b84a4 | 66 | virtual uint32_t GetColor(int x) |
MikamiUitOpen | 0:9a78f27b84a4 | 67 | { return (x == 0) ? LCD_COLOR_BLACK : LCD_COLOR_WHITE; } |
MikamiUitOpen | 0:9a78f27b84a4 | 68 | }; |
MikamiUitOpen | 0:9a78f27b84a4 | 69 | |
MikamiUitOpen | 0:9a78f27b84a4 | 70 | // Derived class of Mandelbrot set drawer to draw pattern 1 |
MikamiUitOpen | 0:9a78f27b84a4 | 71 | class MandelbrotColor1 : public MandelbrotBase |
MikamiUitOpen | 0:9a78f27b84a4 | 72 | { |
MikamiUitOpen | 0:9a78f27b84a4 | 73 | public: |
MikamiUitOpen | 0:9a78f27b84a4 | 74 | MandelbrotColor1(LCD_DISCO_F746NG &lcd, |
MikamiUitOpen | 0:9a78f27b84a4 | 75 | int x0, int y0, int width, int height, int maxCount = 100) |
MikamiUitOpen | 0:9a78f27b84a4 | 76 | : MandelbrotBase(lcd, x0, y0, width, height, maxCount) {} |
MikamiUitOpen | 0:9a78f27b84a4 | 77 | |
MikamiUitOpen | 0:9a78f27b84a4 | 78 | // Get the color corresponding to the number of repititions |
MikamiUitOpen | 0:9a78f27b84a4 | 79 | virtual uint32_t GetColor(int x); |
MikamiUitOpen | 0:9a78f27b84a4 | 80 | }; |
MikamiUitOpen | 0:9a78f27b84a4 | 81 | |
MikamiUitOpen | 0:9a78f27b84a4 | 82 | // Derived class of Mandelbrot set drawer to draw pattern 2 |
MikamiUitOpen | 0:9a78f27b84a4 | 83 | class MandelbrotColor2 : public MandelbrotBase |
MikamiUitOpen | 0:9a78f27b84a4 | 84 | { |
MikamiUitOpen | 0:9a78f27b84a4 | 85 | public: |
MikamiUitOpen | 0:9a78f27b84a4 | 86 | MandelbrotColor2(LCD_DISCO_F746NG &lcd, |
MikamiUitOpen | 0:9a78f27b84a4 | 87 | int x0, int y0, int width, int height, int maxCount = 100) |
MikamiUitOpen | 0:9a78f27b84a4 | 88 | : MandelbrotBase(lcd, x0, y0, width, height, maxCount) {} |
MikamiUitOpen | 0:9a78f27b84a4 | 89 | |
MikamiUitOpen | 0:9a78f27b84a4 | 90 | // Get the color corresponding to the number of repititions |
MikamiUitOpen | 0:9a78f27b84a4 | 91 | virtual uint32_t GetColor(int x); |
MikamiUitOpen | 0:9a78f27b84a4 | 92 | }; |
MikamiUitOpen | 0:9a78f27b84a4 | 93 | } |
MikamiUitOpen | 0:9a78f27b84a4 | 94 | |
MikamiUitOpen | 0:9a78f27b84a4 | 95 | #endif // F746_MANDELBROT_HPP |