basic blob
This commit is contained in:
parent
50de931e8a
commit
91c1bc50f3
@ -41,6 +41,15 @@ int end_y = 27;
|
|||||||
int anchor_x = 16;
|
int anchor_x = 16;
|
||||||
int anchor_y = 24;
|
int anchor_y = 24;
|
||||||
|
|
||||||
|
#define BLOB_POINTS 14
|
||||||
|
#define BLOB_RADIUS 12
|
||||||
|
typedef struct {
|
||||||
|
int x_coords[BLOB_POINTS];
|
||||||
|
int y_coords[BLOB_POINTS];
|
||||||
|
} Blob;
|
||||||
|
|
||||||
|
Blob blob;
|
||||||
|
|
||||||
void setup(){
|
void setup(){
|
||||||
Serial.begin(BAUD_RATE);
|
Serial.begin(BAUD_RATE);
|
||||||
pinMode(ONBOARD_LED, OUTPUT);
|
pinMode(ONBOARD_LED, OUTPUT);
|
||||||
@ -62,6 +71,15 @@ void setup(){
|
|||||||
matrix->begin();
|
matrix->begin();
|
||||||
matrix->setBrightness8(64);
|
matrix->setBrightness8(64);
|
||||||
matrix->fillScreenRGB888(0, 0, 0);
|
matrix->fillScreenRGB888(0, 0, 0);
|
||||||
|
|
||||||
|
for(int i = 0; i < BLOB_POINTS; i++) {
|
||||||
|
//float angle = (360 / BLOB_POINTS) * (i+1);
|
||||||
|
float angle = ((PI * 2) / BLOB_POINTS) * (i+1);
|
||||||
|
blob.x_coords[i] = random(-6, 7) + 31 + round(BLOB_RADIUS * sin(angle));
|
||||||
|
blob.y_coords[i] = random(-2, 7) + 15 + round(BLOB_RADIUS * cos(angle));
|
||||||
|
//blob.x_coords[i] = random(0, 64);
|
||||||
|
//blob.y_coords[i] = random(0, 32);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int interpolate(int from, int to, float percent) {
|
int interpolate(int from, int to, float percent) {
|
||||||
@ -69,37 +87,61 @@ int interpolate(int from, int to, float percent) {
|
|||||||
return from + ( difference * percent );
|
return from + ( difference * percent );
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_bezier(int x1, int y1, int x2, int y2, int x3, int y3, float percent) {
|
void draw_bezier(int x1, int y1, int x2, int y2, int x3, int y3) {
|
||||||
// draw lines to p2
|
// draw lines to p2
|
||||||
matrix->drawLine(x1, y1, x2, y2, matrix->color565(16, 16, 16));
|
//matrix->drawLine(x1, y1, x2, y2, matrix->color565(16, 16, 16));
|
||||||
matrix->drawLine(x2, y2, x3, y3, matrix->color565(16, 16, 16));
|
//matrix->drawLine(x2, y2, x3, y3, matrix->color565(16, 16, 16));
|
||||||
|
|
||||||
int xa = interpolate(x1, x2, percent);
|
for (float percent = 0; percent < 1; percent += 0.02) {
|
||||||
int ya = interpolate(y1, y2, percent);
|
int xa = interpolate(x1, x2, percent);
|
||||||
int xb = interpolate(x2, x3, percent);
|
int ya = interpolate(y1, y2, percent);
|
||||||
int yb = interpolate(y2, y3, percent);
|
int xb = interpolate(x2, x3, percent);
|
||||||
//matrix->drawLine(xa, ya, xb, yb, matrix->color565(0, 128, 0));
|
int yb = interpolate(y2, y3, percent);
|
||||||
|
//matrix->drawLine(xa, ya, xb, yb, matrix->color565(0, 128, 0));
|
||||||
|
|
||||||
int x = interpolate(xa, xb, percent);
|
int x = interpolate(xa, xb, percent);
|
||||||
int y = interpolate(ya, yb, percent);
|
int y = interpolate(ya, yb, percent);
|
||||||
|
|
||||||
matrix->drawPixel(x, y, matrix->color565(255, 255, 255));
|
matrix->drawPixel(x, y, matrix->color565(255, 80, 83));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
// matrix ->flipDMABuffer();
|
// matrix ->flipDMABuffer();
|
||||||
matrix->clearScreen();
|
//matrix->clearScreen();
|
||||||
// delay(25);
|
matrix->fillScreenRGB888(15, 0, 10);
|
||||||
anchor_y += 1;
|
// draw grid
|
||||||
if (anchor_y >= 32) {
|
|
||||||
anchor_y = 0;
|
int h_lines = PANEL_HEIGHT / 7;
|
||||||
|
int v_lines = PANEL_WIDTH / 7;
|
||||||
|
for(int i = 0; i < PANEL_WIDTH; i++) {
|
||||||
|
if(i % 7 == 2) {
|
||||||
|
matrix->drawFastVLine(i, 0, PANEL_HEIGHT, matrix->color565(41, 17, 76));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (float i = 0; i < 1; i += 0.02) {
|
for(int i = 0; i <= h_lines; i++) {
|
||||||
draw_bezier(start_x, start_y, anchor_x, anchor_y, end_x, end_y, i);
|
matrix->drawFastHLine(0, 7*i + 1, PANEL_WIDTH, matrix->color565(41, 17, 76));
|
||||||
}
|
}
|
||||||
matrix->drawPixel(start_x, start_y, matrix->color565(255, 0, 0));
|
|
||||||
matrix->drawPixel(end_x, end_y, matrix->color565(255, 0, 0));
|
for(int i = 0; i < BLOB_POINTS; i+=2) {
|
||||||
matrix->drawPixel(anchor_x, anchor_y, matrix->color565(255, 0, 255));
|
int end_offset = i + 2;
|
||||||
delay(100);
|
if ( end_offset >= BLOB_POINTS) {
|
||||||
|
end_offset = 0;
|
||||||
|
}
|
||||||
|
draw_bezier(blob.x_coords[i],
|
||||||
|
blob.y_coords[i],
|
||||||
|
blob.x_coords[i+1],
|
||||||
|
blob.y_coords[i+1],
|
||||||
|
blob.x_coords[end_offset],
|
||||||
|
blob.y_coords[end_offset]
|
||||||
|
);
|
||||||
|
matrix->drawPixel(blob.x_coords[i], blob.y_coords[i], matrix->color565(128, 128, 128));
|
||||||
|
//matrix->drawPixel(blob.x_coords[i], blob.y_coords[i], matrix->color565(0, 0, 128));
|
||||||
|
//matrix->drawPixel(blob.x_coords[i+1], blob.y_coords[i+1], matrix->color565(128, 0, 0));
|
||||||
|
//matrix->drawPixel(blob.x_coords[end_offset], blob.y_coords[end_offset], matrix->color565(0, 0, 128));
|
||||||
|
}
|
||||||
|
delay(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user