Один из вариантов не решения проблемы, а помощи в нахождении пересечений - сделать заливку точек более прозрачной (а черный контур точек оставить как есть, непрозрачным) - тогда наложение точек друг на друга будет гораздо легче находить. Можно ещё сделать визуальную инверсию цветов - если точки накладываются друг на друга, то точка сверху становится обратного цвета (черного), но это вероятно не позволит сделать текущий движок.
После сглаживания точек контура (лес, водоём) происходит самоналожение контура (некорректная геометрия) или слишком близкие точки.
Позволю добавить предлагаемый ранее в клубе алгоритм... Именно расстояние от ближайшей точки к вершине и величины угла может определять начало или конец дуги, которая будет формироваться. Это на случай прецизионных закруглений. Т.е. нужно закругление острее - зафиксировали, естественно в разумных пределах. Сейчас такое игнорируется. Алгоритм: стандартный радиус как сейчас, определяются 2 точки начала дуги, если есть точка находящаяся ближе определённых, пересчитать по ней начало дуги - удаление вершины - расстановка новых точек. Но! Перед этим проверить применяемость на следующей вершине, Если средняя линия, для которой вычислена 2-я точка первой дуги подпадает под скругление и длина точки начала этой дуги до вершины этого угла будет больше, чем от вершины первого угла до - значит будет пересечение (как сейчас: или одна на одной или перехлёст), если нет - дуга готова . Решение: Берётся середина средней линии и ставится 2-я точка первой дуги, 1-я точка ставится на такое же расстояние от вершины = 1-я дуга готова можно ставить. Далее есть виртуальная 2-я дуга, обрабатывается следующий отрезок. Если 1-я точка новой дуги будет не будет "заходить" за 2-ю предыдущей (которую держим в уме) т.к. будет ограничена ею или следующей вершиной, т.е. изначально радиус определён, если он уже минимален, т.е. упирается в вершину, 2-я и эта дуга готова - вершина оставляется и всё начинается заново. Ещё вариант: пересчитать 2-ю дугу, она уменьшится в радиусе и 1-ю её точку соединить линией с последней точкой первой дуги (помните? :) По второму варианту закругления будут как бы средневзвешенные. Естественно самая первая точка, начало полигона также подлежит корректировке, если она не вяжется, по первому варианту именно она определяет радиус последней дуги. Все минимальные радиуса естественно игнорируются, если есть 2 точки с минимальным расстоянием - образуют 1-у вершину в продолжении.