Найти тему
За_тех_кто_в_коде();

Эллипс, вариант первый.

Конечно, для меня это далеко не первый вариант и даже не второй. Задачка конечно, с тремя звездочками. Причем, реального кода, если убрать элементы типа объявления переменных, там строчек 20 наверное. Функция работает по тому же принципу что и окружность, которую я писал многим ранее, и которая на удивление ну очень легко зашла. Сперва черновик в виде массива, а потом вторая функция отрисовки, которая тупо двигается по массиву, в ней ничего особенного.

Казалось бы есть черновик для четверти окружности. По сути нужно его просто слегка подредактировать.

Типа, в окружности у нас один радиус, а в эллипсе мы выезжаем из r1, а приехать должны в r2. Но как оказалось, просто так, ездить не получится, для написания алгоритма, необходимо хоть какое-то определение иметь. Это уже после некоторых мытарств с кодом понимаешь.

В школьной программе по геометрии эллипса нет, я позже вспомнил, что он вроде был в черчении, но уже искать был ленив. Вузовские книги пока смотреть не стал, но с хрестоматийными формулами в последствии нужно будет сравнивать.

Я предположил, и возможно это где-то записано, что эллипс это проекция окружности на плоскость. Сперва была идея что можно что-то из углов вытащить, но позже прояснилась другая зависимость. Квадрат радиуса окружности, находится в таком же отношении к малому радиусу квадрату эллипса, как (а вот тут уже начинаются сложности с терминологией) квадраты половины вертикальной хорды окружности? К квадрату половины вертикальной хорды эллипса? Но как-то это называться должно.

И это еще не все определения. В случае с окружностью, можно было оставаться в квадратных корнях, здесь же алгоритм требовал конкретного значения. И оказалось, что вместо того чтобы работать с переменными float проще создать округленный квадратный корень, бывает и такое. Если открыть таблицу квадратов, то легко убедиться что каждое значение, как раз по своему значению смотрит в обе стороны. Например 16, 25, 36. 25 это +/- 5, 36 это +/- 6 и так далее.

Но даже всех этих подвижек не хватило для полноценного алгоритма. Он получился с костылями, даже с двумя… Нужно пересмотреть алгоритм, начиная с окружность, там имеются, не костыли, но лишние движения алгоритма… Не исключено что базовая формула, не в полной мере работоспособна. Сложная задача, хочется хоть как-то зафиксировать и пока отложить. Когда будет работать без костылей, можно будет более подробно разобрать.

Так же добавлена возможность вручную создавать небольшие изображения 8х8 или 16х16 пикселей, заполняя небольшой массив. В примерах, для Arduino есть. Изображение так же можно зеркалить по горизонтали или вертикали. Позже сделаю описание на странице библиотеки на сайте.

Исправлены ошибки и предупреждения на которые ругался компилятор в Atmel Studio, он все таки более требовательный чем в Arduino IDE. Хотя в этом пожалуй даже присутствует некоторое преимущество Arduino IDE.

Версия 0.9.2

Display_Lib_8bit.zip
Display_Lib_16bit.zip
Display_Lib_SPI.zip