Если говорить о продуктах Кредо-Диалог, то стоит упомянуть, что задача аппроксимации окружности решается в Credo III (Топоплан, Линейные Изыскания, Генплан и т.д.) одной командой "Окружность - Аппроксимировать по точкам". Полагаю, что сходный метод есть и в программах, работающих на движке Автокада. Разумеется, обсуждение вопроса "Как это делается" гораздо полезнее и интереснее, чем просто совет "тыкай в эту кнопку". Но теперь, когда тема достигла определенного развития, стоит и указать на то, что практически такие задачи можно решать и не включая мозг. Спасибо программистам.
да, точно. Извиняюсь, когда переписывал данные, округлил невнимательно. Проклятый аклоголь! Для себя выводил пять знаков после запятой, значение 1223,38991. Как решать подобные вещи для круга и эллипса, кому интересно и не страшат частные производные, могу объяснить. С т. з. математики это очень изящно получается.
В російській локалізації excel - надстройка "Поиск решения" (http://goo.gl/9kJwi). Спойлер (Наведите указатель мыши на Спойлер, чтобы раскрыть содержимое) Раскрыть Спойлер Свернуть Спойлер Підбираємо параметри x0, y0,r так, щоб сума квадратів відхелень була мінімальною (пошук рішень в excel взагалі то не за МНК, але так як залежність між змінними не лінійна це найпростіший спосіб) Спойлер (Наведите указатель мыши на Спойлер, чтобы раскрыть содержимое) Раскрыть Спойлер Свернуть Спойлер Для еліпса - аналогічно, тільки поправки обчислюємо з рівняння еліпса і відповідно маємо ще одну змінну додадкову вісь еліпса: Спойлер (Наведите указатель мыши на Спойлер, чтобы раскрыть содержимое) Раскрыть Спойлер Свернуть Спойлер Спойлер (Наведите указатель мыши на Спойлер, чтобы раскрыть содержимое) Раскрыть Спойлер Свернуть Спойлер
Всем добрый вечер!Действительно интересно поразмыслить как это можно сделать без каких либо встроенных функций в каком-либо софте. Кстати такая задача была у нас в своё время (когда учился в универе), решали мы её в маткаде. А вообще функция апроксимации набора точек окружностью есть как в цивиле так и в лэнд десктоп, там ещё и веса можно отдельным точкам назначать, усреднение производится естественно по методу наименьших квадратов.
Итак, господа, постарался подробно все описать. Если есть вопросы задавайте. Мог сделать опечатку ибо писалось все под бокал рома с колой... Проклятый аклоголь! Файл прилагаю в zip-е, ибо docx грузить не хочет. Kub13 у вас прекрасный способ с комбинированием всевозможных уравнений, чтобы система была не переопределенной. Сам сходу не смог алгоритм придумать по комбинированию исходных данных в уравнения с последующим решением
tsg, с окружностью действительно очень классно получилось!всё понятно,спасибо!а как быть с эллипсом?там же надо найти получается координаты центра,две полуоси и ориентирование одной из осей,так?
С эллипсом, если его оси параллельны осям прямоугольной системы координат, нужно вычислить 4 частных производных. Для определения уравнения надо 4 точки. Уравнение эллипса брать в виде b^2(x-xC)^2 + a^2(y - yC)^2 - (a*b)^2 = 0, где, a и b - полуоси, xC и yC - координаты центра эллипса, производные по a, b, xC, yC. Получается все почти в копейку как и с кругом. Но! Эллипс можно еще и поворачивать! Если угол поворота осей заранее известен, то он в качестве параметра минимизации не участвует (те же 4 параметра), а вот если учитывать и его... Тут сдаюсь. Надо брать учебник алгебры, например Куроша, смотреть приведение квадратичных форм к каноническому виду, смотреть производные. Далее пытаться линеаризовать производные. Но скорее всего такой красоты как с кругом/"просто эллипсом" не получиться и линеаризацию придется делать путем разложения в степенные ряды, ну а далее стандартный МНК для систем линейных уравнений. Тут проще Minimize Маткадовский использовать как у вас в примере приложенном
а результаты -координаты центра, радиус, отклонения от радиуса набора точек можно покрупнее? Или в TXT?
Вы мне льстите :). Это не я придумал, чье авторство не знаю. Я только постарался понятно и доступным языком описать "как это работает".
Всем доброго дня!Выкладываю лисп файл. Сразу прошу не судить строго, так как программист из меня никакой, развлекаюсь так...можно сказать для души=)поэтому знающим людям код конечно же покажется корявым и вообще ужасным, но для меня главное что работает=) 1. Сохраняем файл на компьютере (например просто на диске С). 2.Далее, запускаем Автокад и выбираем Сервис >> Автолисп >> Загрузить (Tools >> AutoLISP >> Load) или набираем в командной строке _appload. а. Перейдите к папке, куда Вы сохранили lisp файл. б. Выберите файл, который Вы хотите загрузить из списка. в. Нажмите кнопку Загрузить. (Если все прошло удачно, Вы должны увидеть надпись "апроксимация точек окружностью.lsp успешно загружено") г. Нажмите кнопку Закрыть для завершения команды. Есть много других спопособ запустить файл, кто хочет может найти в инете, можно сделать чтобы он по кнопочке вызывался. В программу можно добавить какой-нибудь алгоритм отбраковки выбросов или оценку точности при желании.
Здравствуйте, может ли кто-то подсказать, существуют ли программные методы аппроксимации N-ного колличества точек плоскостью?
есть простой алгоритм http://www.janssenprecisionengineering.com/downloads/Fit-plane-through-data-points.pdf правда обратную матрицу нужно считать, но это можно реализовать в автокаде, в пространстве имён Autodesk.AutoCAD.Geometry есть метод Inverse() --- Сообщения объединены, 12 мар 2019, Оригинальное время сообщения: 12 мар 2019 --- или нужна готовая реализация? --- Сообщения объединены, 12 мар 2019 --- Кстати о строгости МНК, на весах вся его строгость заканчивается, да и с вылетами что делать?