я бы сказал настоящая магия, потому что лично я не могу осмыслить ваш код)))
Я его тоже через месяц не пойму ![]()
В массиве картинки выделяется псевдослучайно сектор в 30 градусов и каждая точка его строится 12 раз (аналог: свеча меж двумя зеркалами в угол 30 градусов - даёт 11 изображений и 12 сама свеча).
ну в целом вроде понятно, еще ии может объяснить, но при этом не могу понять код)))
а может деньги рисовать ? или все таки то что их принесет!))) но для этого наверное не на этом дисплее надо делать)))
что то меня только к ним тянет))) как магнитом!
но однозначно круто, почти не тратится память… и тем более не используется sd карта…
Какая строка?
lilik в целом код понятен, но осознать его не могу))) что бы переделывать его, и делать что угодно, с этими сложениями и умножением я через время уже не понимаю что мы берем, и что делаем)))
мне все этот стол не дает покоя)))) https://aliexpress.ru/item/1005010712565432.html допустим он стоит 15к в китае, я просто ссылку сразу не смогу найти… купить его и сделать свое приложение с готовыми рисунками, или с загрузкой любых рисунков в формате текстового документа с координатами, если использовать программу гавера, поменять электронику если надо, и первые модели корпуса делать жидкой химией, хоть и дорого…
и если продавать такие столы за 20к так как функционал больше будет в нем, это зайдет у нас ?)))
или не будут покупать ? продавать через какой то озон например….
никак не могу решиться, опасаюсь потрачу время и деньги, а выхлопа не будет)))
но если вы богатый, то просто снежинки рисовать тоже можно!))))
Вот там точно надо будет от декартовых координат к полярным и обратно ![]()
Проще имеющим на руках такие столы предложить более продвинутое ПО… по символической цене.
…легенда такая: купил стол, набор картинок и возможностей - фигня, сделал круче, могу продать по дешёвке приложение.
Вряд ли он даст интегрировать программу в приложение. А без этого нужно будет пользователю картинку в массив координат векторов переводить гайверовским конвертером.
опасно наверное задавать тут такие вопросы, а то и какахами закидать могут… ладно я рискну…
мне пришла идея попытаться использовать ваш код для решения задачи о 8 ферзях…
кто что думает ?)))
А как же песочный стол? Вот для начала можно попробовать гайверовский конвертер картинок “выводить на экран”.
А то как узнать какую картинку рисовать?
Кстати для сравнения слева отрисовка картинки способом-конвертером плоттера, справа гайверовским конвертером.
стол это стол, я многоядерный, еще и бабочку летающую хочу сделать)))
но пока что думаю над алгоритмом размещения ферзей
а ссылка есть на готовый инструмент ?)))
что бы потом скармливать координаты esp, а она их рисовала
вы видели там он ее обновил еще, это вы недавно там конвертировали или уже давно ?
хотел найти фото что бы самому попытаться повторить и посмотреть что будет, но оригинальное фото в сети вашего кота не нашел
Вот космонавт
В качестве алгоритма реализации, одного из многих, выбран следующий: файл исходного изображения конвертируем в файл с расширением .plt, полученный файл открываем с помощью приложения notepad++ и немного редактируем текст, вставляем текст в скетч, загружаем в плату и производим рисование картинки. Такой подход оставляет макет автономным устройством, не требующим подключения к ПК или наличия карты хранения файла.
у меня вот что выходит, но главное рисунок одной линией!))) без поднятия шарика- пера
вы точно новые фото только что сделанные скидываете ?))) там конструктор этот претерпел изменения, и куча настроек есть еще
https://alexgyver.github.io/MagicGyver/ но главное это получение координат, для движения по ним
Нет, это старые и не конвертер Гайвера, а другой способ получения - плоттерный.
Вот кот и трансформация по Гайверу с отрисовкой
А вот метод плоттера
Ясный пень :)…главное это научиться сначала на дисплей выводить, потом на рисовалку, потом на песок.
… и всё на основе одного файла векторов.
вы если захотите вернуться к этому проекту, учтите гайвер поправил проект
естественно это хуже, но есть координаты и можно выводить!)))#include <TFT_eSPI.h>
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI();
// ==== РАЗМЕРЫ ====
#define BOARD_SIZE 8
#define CELL_SIZE 15
#define QUEEN_SIZE 6
#define NUM_SOLUTIONS 12
// Координаты доски на экране
#define BOARD_X 4
#define BOARD_Y 4
// Известные решения задачи 8 ферзей
const int solutions[NUM_SOLUTIONS][BOARD_SIZE] = {
{0, 4, 7, 5, 2, 6, 1, 3}, // Решение 1
{0, 5, 7, 2, 6, 3, 1, 4}, // Решение 2
{0, 6, 3, 5, 7, 1, 4, 2}, // Решение 3
{0, 6, 4, 7, 1, 3, 5, 2}, // Решение 4
{1, 3, 5, 7, 2, 0, 6, 4}, // Решение 5
{1, 4, 6, 0, 2, 7, 5, 3}, // Решение 6
{1, 4, 6, 3, 0, 7, 5, 2}, // Решение 7
{1, 5, 0, 6, 3, 7, 2, 4}, // Решение 8
{1, 5, 7, 2, 0, 3, 6, 4}, // Решение 9
{1, 6, 2, 5, 7, 4, 0, 3}, // Решение 10
{1, 6, 4, 7, 0, 3, 5, 2}, // Решение 11
{1, 7, 5, 0, 2, 4, 6, 3} // Решение 12
};
int currentSolution = 0;
int currentQueen = 0; // Текущий ферзь для отображения (0-7)
unsigned long lastTime = 0;
const int animationDelay = 300; // Задержка между ферзями
unsigned long solutionShowTime = 0;
const int solutionShowDuration = 3000; // Показывать решение 3 секунды
void setup() {
Serial.begin(115200);
tft.init();
tft.setRotation(3);
tft.fillScreen(TFT_BLACK);
#ifdef TFT_BL
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
#endif
}
// Нарисовать шахматную доску
void drawChessBoard() {
// Очищаем область доски
tft.fillRect(BOARD_X, BOARD_Y,
CELL_SIZE * BOARD_SIZE,
CELL_SIZE * BOARD_SIZE,
TFT_BLACK);
// Рисуем клетки доски
for (int row = 0; row < BOARD_SIZE; row++) {
for (int col = 0; col < BOARD_SIZE; col++) {
int x = BOARD_X + col * CELL_SIZE;
int y = BOARD_Y + row * CELL_SIZE;
// Чередование цветов клеток
if ((row + col) % 2 == 0) {
tft.fillRect(x, y, CELL_SIZE, CELL_SIZE, TFT_WHITE);
} else {
tft.fillRect(x, y, CELL_SIZE, CELL_SIZE, tft.color565(0, 100, 0));
}
// Рамка клетки
tft.drawRect(x, y, CELL_SIZE, CELL_SIZE, TFT_BLACK);
}
}
}
// Нарисовать ферзя на указанной позиции
void drawQueen(int row, int col) {
int centerX = BOARD_X + col * CELL_SIZE + CELL_SIZE / 2;
int centerY = BOARD_Y + row * CELL_SIZE + CELL_SIZE / 2;
// Рисуем красный круг
tft.fillCircle(centerX, centerY, QUEEN_SIZE, TFT_RED);
// Черная обводка
tft.drawCircle(centerX, centerY, QUEEN_SIZE, TFT_BLACK);
// Белая буква Q
tft.setTextColor(TFT_WHITE);
tft.setTextSize(1);
tft.setCursor(centerX - 3, centerY - 4);
tft.print("Q");
}
// Отобразить текущее решение
void drawCurrentSolution() {
drawChessBoard();
// Рисуем всех ферзей текущего решения
for (int i = 0; i <= currentQueen; i++) {
int row = i; // Каждый ферзь в своей строке
int col = solutions[currentSolution][row];
drawQueen(row, col);
}
// Отображаем информацию
tft.fillRect(0, BOARD_Y + CELL_SIZE * BOARD_SIZE + 5, 128, 30, TFT_BLACK);
tft.setTextColor(TFT_WHITE);
tft.setTextSize(1);
tft.setCursor(5, BOARD_Y + CELL_SIZE * BOARD_SIZE + 5);
tft.print("Solution ");
tft.print(currentSolution + 1);
tft.print("/");
tft.print(NUM_SOLUTIONS);
tft.setCursor(5, BOARD_Y + CELL_SIZE * BOARD_SIZE + 15);
tft.print("Queens: ");
tft.print(currentQueen + 1);
tft.print("/8");
}
// Начать новое решение
void startNewSolution() {
currentQueen = 0;
drawCurrentSolution();
solutionShowTime = 0; // Сбрасываем таймер показа
}
void loop() {
unsigned long currentTime = millis();
if (solutionShowTime == 0) {
// Фаза появления ферзей
if (currentTime - lastTime > animationDelay) {
lastTime = currentTime;
if (currentQueen < 7) {
currentQueen++;
drawCurrentSolution();
} else {
// Все ферзи размещены, начинаем отсчет времени показа
solutionShowTime = currentTime;
}
}
} else {
// Фаза показа готового решения
if (currentTime - solutionShowTime > solutionShowDuration) {
// Переходим к следующему решению
currentSolution = (currentSolution + 1) % NUM_SOLUTIONS;
startNewSolution();
}
}
}
а для ферзей вашу математическую магию снежинок не применить ?)))
что бы и доску увеличивать и быстро искать решения но не перебором!
там все го то циферки надо как то передвигать…)))
Вы смотрели сколько у вашего котика с таким качеством отрезков в построении?
Ну с экрана 160х128 и надо начинать.
Вот кстати мысль - вместо бумаги и фломастера планшет за 500р. и стилус
это еще надо все собирать, еще и механику искать, я лучше бы тогда на дисплее большом сделал бы, и на меге а на на есп32 код который выше скидывал
дофига, но тут главная фишка что вся механика скрыта, и ты наблюдаешь как шарик работает, а на это вроде можно смотреть вечно!)))
и в конечном итоге вроде получается не плохой рисунок…
вот
но снежинка не вмещается))) слишком малое разрешение
да, но !))) у нас есть sd карта, и мы с нее берем координаты, там целых 4гб памяти! а потом пусть потомки голову ломают как улучшать этот проект, и найти еще место))) а пока что просто надо добавлять sd карту в проекты
А Вы себе представляете, сколько времени Ардуина эти 4 ГБ будет вычитывать?











