Mandelbrot set generator using DISCO-F746NG.

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed BUTTON_GROUP

Committer:
MikamiUitOpen
Date:
Mon Feb 22 13:51:42 2016 +0000
Revision:
6:cafbcdf0d166
Parent:
2:6c1471e4a4b1
7

Who changed what in which revision?

UserRevisionLine numberNew 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