Как правильно вставить в Ардуино файл?

Нужно будет считать (Y2-Y1)/(X2-X1) - (Y3-Y2)/(X3-X2) . При значении близком к 0.0 - X2,Y2 отбрасываем. Но при int не пройдёт фокус.
Если dx=0, то dx=1.

Критерий близости?

Посчитайте: {0,0;127,159;0,0}

Да.

(159-0)/(127-0)-(0-159)/(0-127)=0… Да… опять мимо :slight_smile:

Значит предварительно дополнительно придётся проверять совпадение знаков плюс-минус для (X2-X1),(X3-X2) и (Y2-Y1),(Y3-Y2) :frowning:

Мажет через направляющие косинусы вектора? Расчеты сложнее, зато ответ строго однозначен.

Вот опять тот же принцип, который действует при проектировании любого алгоритма: если не знаешь, что должен делать алгоритм, представь, что бы ты стал делать на его месте.
Во-первых, генерализация производится для данных конкретных условий, т.е. алгоритм должен пользоваться константами, описывающими некоторый минимальный размер - толщина линии (на бумаге), размер пикселя (на экране) и т.п.
Дальше - что мы делаем? Мы убираем детали меньше этого минимального размера.
Как это выглядит в случае ломаной? Выбрасывается целиком тот фрагмент ломаной, все точки которого лежат на расстоянии меньше минимального от отрезка, соединяющего концы.
Вот, собственно, основной критерий. Для него нужно уметь считать расстояние от точки до отрезка. Ну а дальше - просто тем или иным способом перебирать точки.
Вот один из алгоритмов сложности O(N*lg(N)):

  1. Если множество внутренних точек пустое (в фрагменте только 2 точки) - конец алгоритма. Иначе:
  2. Проходим по фрагменту ломаной, вычисляя расстояние от каждой из внутренних точек до отрезка, соединяющего концы.
  3. Находим максимум.
  4. Если максимум меньше минимального расстояния, выбрасываем все промежуточные токи и - конец алгоритма.
  5. Если максимум больше:
  • помечаем найденную точку - она исключается из “кандидатов на вылет”.
  • делим фрагмент на два: от первой точки до найденной и от найденной до последней.
  • рекурсивно повторяем для каждого из новых фрагментов алгоритм, начиная с п. 1.

В результате у нас останутся только те точки, которые необходимо оставить.

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

Не, у меня проще. Если текущий вектор отклоняется от предыдущего на небольшой угол - отбрасываем точку-вектор и смотрим следующую.

Лично у меня критерий правильности имеет намного более высокий приоритет по сравнению с критерием простоты. Т.е. по простоте можно выбирать только между двумя правильными, а если один из них правильный, а другой - нет, простота даже не рассматривается. А то получается как в анекдоте: ищу не там, где потерял, а там, где светлее.

Попробовал я свой алгоритм. Фигня, при сохранности половины векторов от исходника получается так:


Поэтому взял самописное приложение, подправил чтобы выдавало plt файл. В итоге
kod_1
И всего 228 векторов против 900 в исходнике!
Сам себе адаптер - хочешь выше разрешение, хочешь ниже, всё в глазах и в руках :slight_smile:

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

А чем inkscape не устраивает? Нажимаешь кнопочку упросить пока результат перестаёт устраивать.

Да, можно векторные шрифты рисовать для экранчиков.

Не пробовал, глянул про него, не нашёл plt формат для работы.

:slight_smile:
Потому что там можно найти лучше, чем то, что потерял.

Это практическая задача, альтернатива GBRL. Просто плоттер должен быть из железа, а не как у меня из пластика :slight_smile:
Кстати автора темы (ссылка в первом посте) в конце упрекнули - зачем новое, если все пользуются старым?
Больше железа - меньше люфта.

Это две совершенно разные задачи: найти свое, что потерял, и найти что-то, (все равно что) [чужое] хорошее.
Но, вообще-то, аналогия не совсем верная. Делаю швейную машинку, но если будет работать неправильно, постараюсь использовать ее как пылесос.

2 лайка

HPGL импортирется и экспортируется это тот же PLT только расширение поменять.

Спасибо, понял.
Качнул у китайского продавца архив к такому чпу-плоттеру, там вроде есть это ПО.


Такой ещё вопрос возник философический :slight_smile: Вместо одной линии векторные преобразования дают всегда две, т.е. тонкая линия всё равно конвертерами воспринимается как толстая. Это не всегда хорошо, какие есть варианты для реализации одной?
…Вообще задумался как в ардуино грузить сразу stl файл.
Внутри он такой (как правило :slight_smile:

olid OpenSCAD_Model
  facet normal -0.851242 0.509558 0.125449
    outer loop
      vertex 62.7397 64.0007 64.43
      vertex 65.7337 71.7097 53.433
      vertex 59.4607 63.3737 44.727
    endloop
  endfacet
  facet normal -0.999388 0.00603001 0.0344432
    outer loop
      vertex 62.7397 64.0007 64.43
      vertex 62.3567 53.2167 55.205
      vertex 62.7397 48.5727 67.131
    endloop
  endfacet
  facet normal -0.98014 -0.107656 0.166542
    outer loop
      vertex 59.4607 63.3737 44.727
      vertex 62.3567 53.2167 55.205
      vertex 62.7397 64.0007 64.43
    endloop
  endfacet
.....
endsolid OpenSCAD_Model

Как отбросить лишнее - вектора нормалей с числами?

Какие две линии? Это лазергрбл две линии даёт .

Неправда Ваша. Это зависит от внутреннего устройства этого самого векторизатора.

Использовать подходящий векторизатор.

Там нужно не только нормали отбрасывать, там нужно еще проекцию на плоскость делать.

И, кстати, - да, в STL файле каждая грань записывается независимо от других, а потому каждое ребро встречается в файле дважды - в составе каждой из двух смежных граней. Но это проблема исключительно STL файла. Если обрабатывать на ПК (т.е. там, где хватает памяти), проблем с удалением лишних ребер быть не должно.

Рассмешнил😁

Лиса справа.

Онлайн конверторы я пробовал для формата plt.

Ясно, будет опять две линии.