88 lines
2.1 KiB
C++
88 lines
2.1 KiB
C++
/*
|
|
Inkplate_Mandelbrot_set sketch for e-radionica.com Inkplate 6
|
|
Select "Inkplate 6(ESP32)" from Tools -> Board menu.
|
|
Don't have "Inkplate 6(ESP32)" option? Follow our tutorial and add it:
|
|
https://e-radionica.com/en/blog/add-inkplate-6-to-arduino-ide/
|
|
|
|
This example renders the mandelbrot set to coordiantes to Inkplate.
|
|
Due to the nature of Mandelbrot set, it is quite slow on low powered MCUs, so please be patient :)
|
|
|
|
Want to learn more about Inkplate? Visit www.inkplate.io
|
|
Looking to get support? Write on our forums: http://forum.e-radionica.com/en/
|
|
15 July 2020 by e-radionica.com
|
|
*/
|
|
|
|
#include "Inkplate.h"
|
|
|
|
#define MAXITERATIONS 150
|
|
|
|
Inkplate display(INKPLATE_1BIT);
|
|
|
|
// Takes a long time to render, cca 3 minutes
|
|
|
|
// Explore different positions to draw
|
|
// Some interesting ones can be found here http://www.cuug.ab.ca/dewara/mandelbrot/Mandelbrowser.html
|
|
double xFrom = -0.7423, xTo = -0.8463;
|
|
double yFrom = 0.1092, yTo = 0.2102;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
display.begin();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
display.clearDisplay();
|
|
for (int j = 0; j < 600; ++j)
|
|
{
|
|
for (int i = 0; i < 800; ++i)
|
|
display.drawPixel(
|
|
i, j, colorAt(xFrom + (double)i * (xTo - xFrom) / 800.0, yFrom + (double)j * (yTo - yFrom) / 600.0));
|
|
// for whole set:
|
|
// display.drawPixel(i, j, colorAt(-2.0 + (3.0 * (double)i / 800.0), -1.0 + 2.0 * (double)j / 600.0));
|
|
Serial.println(j);
|
|
}
|
|
display.display();
|
|
delay(5000);
|
|
}
|
|
|
|
struct complex
|
|
{
|
|
double re;
|
|
double im;
|
|
};
|
|
|
|
void addComplex(struct complex *z, struct complex *c)
|
|
{
|
|
z->re += c->re;
|
|
z->im += c->im;
|
|
}
|
|
|
|
void squareComplex(struct complex *z)
|
|
{
|
|
double re = z->re;
|
|
double im = z->im;
|
|
z->re = re * re - im * im;
|
|
z->im = 2 * re * im;
|
|
}
|
|
|
|
double modulusComplexSqr(struct complex *z)
|
|
{
|
|
return z->re * z->re + z->im * z->im;
|
|
}
|
|
|
|
|
|
uint8_t colorAt(double x, double y)
|
|
{
|
|
struct complex z = {0.0, 0.0};
|
|
struct complex c = {x, y};
|
|
|
|
int i;
|
|
for (i = 0; i < MAXITERATIONS && modulusComplexSqr(&z) <= 4.0; ++i)
|
|
{
|
|
squareComplex(&z);
|
|
addComplex(&z, &c);
|
|
}
|
|
return i == MAXITERATIONS;
|
|
} |