В функцию вместо ожидаемого int16_t передаётся float

В полном круге 360 градусов. Так же в круге 2*PI радиан. Функции тригонометрии стандартной библиотеки принимают радианы. Составьте пропорцию. Упретесь - спросите ИИ. До такой подсказки опускаться не буду уж.

то-есть при переводе в круге образуется дырка, всегда )))

Инженеры используют термин “отверстие“. Давайте держать марку.

1 лайк

Не спрашивал бы, если бы не упёрся..
А для того, чтобы спросить ИИ, надо задать ему правильный вопрос.
Вы наверное, не поверите, но тригонометрию я не понимаю на все 90%..
Пат.. :frowning:

от вер сто )))
а дырка она от другого
PS а про “не проверяй соосность отверстий пальцем” - соглашусь

1 лайк

Для информации - сделал “ромбики”. Понравилось больше, чем “компасные” стрелки.


Хотел “закрасить” стрелки, спросил у ИИ. Получилась “бяка”, оставлю без “закраски”.
ИИ, кстати, меня “честно предупредил”, чтобы я губу сильно не раскатывал.
Так оно и вышло.

P.S. Кстати, в процедурах снова “впихивание” float в ожидаемый int.
Но все (компилятор и МК) это игнорят. Видимо, пофиг, или компилятор правит эти “косяки”.
Но если уж всё работает, нефига соваться к ним со своим Уставом. :slight_smile:

1 лайк

:slight_smile:

А вы заметили, что ромбик это два треугольника, в том числе могут быть и закрашенные?

1 лайк

Конечно заметил. И попытался их “закрасить”, по совету ИИ.
Последний предложил использовать аналог функции fillPolygon.
Он же предложил вариант реализации оной на моём ST7735, в либе которого она отсутствует.
Он же честно предупредил, что могут быть проблемы и.. Они вылезли.
В виде “непрокрашенного треугольника”. Одного. С одной стороны ромба.
Вероятно, “закрашивалось” не два остроугольных треугольника, а четыре прямоугольных..
Вообщем, я на это безобразие посмотрел, вздохнул и решил забить, чтобы не изнасиловать мозг окончательно. :slight_smile:

Ну так, а чего не пользуетесь моим примером, там надо добавить строку по подобию в отрисовку стрелки и строку в затирание предыдущей?

С чего вы это решили? Именно так и использую - затираю “старую” стрелку, затем рисую “новую”.
Вот код:

void Arrow(float degr, color_t COLOR)
{
  volatile float x1, y1, x2, y2, x3, y3, x4, y4;
  int arrowLength = 35;
  float centerX = 64.0; //tft.width() / 2;
  float centerY = 64.0; 

  degr = degr - 90.0;
//  
    x1=arrowLength*cos(degr*0.0175);
    y1=arrowLength*sin(degr*0.0175);
    x2=5*cos(degr*0.0175);
    y2=5*sin(degr*0.0175);
    x3=20*cos((degr+5)*0.0175);
    y3=20*sin((degr+5)*0.0175);
    x4=20*cos((degr-5)*0.0175);
    y4=20*sin((degr-5)*0.0175);
    
//
    tft.drawLine(x1+centerX, y1+centerY, x3+centerX, y3+centerY, COLOR);
    tft.drawLine(x3+centerX, y3+centerY, x2+centerX, y2+centerY, COLOR);
    tft.drawLine(x2+centerX, y2+centerY, x4+centerX, y4+centerY, COLOR);
    tft.drawLine(x4+centerX, y4+centerY, x1+centerX, y1+centerY, COLOR);
}

Вызываю эту ф-ю два раза - сначала с координатами “старой” стрелки и цветом фона,
затем “новую”.

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

Я не знаю, как нарисовать ромб ДВУМЯ остроугольными треугольниками.
И поэтому использовал чужой код с “незакрашенными”.
И по совету ИИ сделал так - сначала нарисовал ромб линиями, затем “закрасил” его функцией fillPolygon.
Получилось тО, что получилось.. Блевотина..

И потом круг-центр сверху дорисовывать.

Шютник.. :slight_smile:

Дело хозяйское, не нравится…ну и ладно.

Отчего же. Нравится. Картинка впечатляет. Особенно размерами и чистотой цвета. :wink:

P.S. Вы с господином Мишутк решили померяться “величием над паствой”?
Нууу.. Дело хозяйское, не смею мешать. :winking_face_with_tongue:

Вряд ли.
Существует алгоритм быстрой отрисовки закрашенного треугольника - широко применялся в 3D графике до того, как 3D ускорители получили широкое распространение.
Суть в том, что из вершины одновременно пускаются два луча по алгоритму похожему на Брезенхема, и при вычислении очередной пары точек (которые, естественно, находятся на одной горизонтали) строка растра между ними закрашивается.
Любопытно, что эффект ускорения при таком алгоритме на Ардуино дисплеях должен проявляться намного заметнее, чекм на VGA экране.

Я вообще в сторонке сижу, примус починяю… Мой опыт в графике только на больших компьютерах (но именно на примитивах, без навороченных библиотек), на МК я еще не дорос.