1. ВНИМАНИЕ! В течении пары дней +- будет переезд форума на более защищённый сервер. Возможны периодические перебои в работе.

Аппроксимация

Discussion in 'Общие вопросы' started by Nikonte, Jan 2, 2013.

  1. stout

    stout Форумчанин

    К сожалению это неправильный алгоритм. То есть он делает не совсем то, что очевидно ожидает большинство пользователей.
    Проще понять это на 2D модели
    Least-squares and total least-squares fits.png
    Алгоритм в статье делает как на левом рисунке, а ожидается результат, как на правом.
     
  2. MaxKal

    MaxKal Форумчанин

    Всё верно, зато этот алгоритм прост в реализации.
    Можно использовать Ransac, но что делать если исходных точек мало?
    статья с хорошим алгоритмом http://mathforum.org/library/drmath/view/63765.html
     
    Last edited: Mar 13, 2019
  3. MaxKal

    MaxKal Форумчанин

    алгоритм в приведённой выше статье рабочий. Однако появился вопрос, а что делать с полученной информацией, какому примитиву соответствует плоскость? Для чего можно использовать параметры плоскости?
     
  4. stout

    stout Форумчанин

    Что толку от простого в реализации алгоритма, если он не отвечает на поставленный вопрос?
    Но и его можно приспособить для нахождения "правильного" ответа. Идея очень проста.
    1. Находим в первом приближении параметры преобразования (смещение и углы разворота).
    2. Преобразуем исходное облако точек с помощью этих параметров так, что плоскость становится почти параллельно основанию.
    3. Опять находим новые параметры и суммируем их с исходно найденными.
    4. Идём на шаг 2 и так до сходимости.
    З.Ы. Поиск в гугле говорит, что реализация SVD на Lisp существует.
     
  5. MaxKal

    MaxKal Форумчанин

    svd на лисп? Это не верх извращения? Я надеюсь это шутка.
    --- Сообщения объединены, Mar 13, 2019, Оригинальное время сообщения: Mar 13, 2019 ---
    кстати в алгоритме во второй статье функция минимизируется по ортогональным расстояниям
     
  6. stout

    stout Форумчанин

    Первое, что нашлось.
     
  7. MaxKal

    MaxKal Форумчанин

    как я понял в приведённом листинге реализации алгоритмов разложений нет, в коде есть ссылки на lapack. Читаемость кода в лиспе никакая, возможно ли вообще на лиспе написать серьёзную библиотеку по линейной алгебре? Нет. Это же реально шутка.
     
  8. MaxKal

    MaxKal Форумчанин

    На самом деле хочется обсудить алгоритм или стратегию аппроксимации цилиндра 3д точками. Занялся этой темой недавно, был объект с наклонными сваями, нужно было центра их искать. Поделитесь кто что знает по этой теме, из того расчёта что точек будет немного, не более 10 на цилиндр.
     
  9. Спасибо за совет, увидел пост поздно, нашел реализацию через Geomagic Desing X, умеет очень много, особенно порадовала возможность установки пределов вылета точек, но продолжаю искать подобные программы ввиду того что Geomagic только с моделями у которых центр тяжести в 0;0;0 работает, приходится трансформировать из WGS-84 и обратно.


    Если всего 10 точек на весь цилиндр, то об облаке и аппроксимации говорить не приходится. Из практических решений могу предложить либо измерить диаметр и крен, либо снимать по ярусам примерно (тут наличие точек на разной высоте в пределах одного яруса влиять особо не будет), а потом вычислить центр тяжести каждого яруса и через него проводить ось цилиндра.[/QUOTE]
     
  10. разметкин

    разметкин Форумчанин

    Раскрепить вертикальный круг и снимать горизонтальные сечения.
     
  11. Это актуально только для одной установки прибора, единственной фронтальной плоскости не всегда хватает что бы снять достаточное сечение для нахождения центра тяжести фигуры.
     
  12. разметкин

    разметкин Форумчанин

    На что может повлиять трансфер высот?
     
  13. zvezdochiot

    zvezdochiot Форумчанин

    Дошли наконец руки. Выкладываю простую итерационную (копи-пастную) схему без всяких там макросов и прочей ерунды.
     

    Attached Files:

    ardi.stroi likes this.
  14. Nikonte

    Nikonte Форумчанин

    я не понял. в начальных вычислениях используются координаты, которые получаются после второй итерации...
    Иными словами задача решается, но ответ уже известен?
     
  15. zvezdochiot

    zvezdochiot Форумчанин

    Нет. Нулевая итерация - это среднее исходных координат. А все остальные итерации - среднее "центров".
    Ежели итерации не устраивают и нужен МНК (OLS), то пользуй https://github.com/Geo-Linux-Calculations/gnumeric-ols .
     
  16. Nikonte

    Nikonte Форумчанин

    дело не в "устраивает / не устраивает", а в том, что dx и dy находятся как разности текущих координат и финальных координат центра.
    Если нам уже известны финальные координаты, то к чему все вычисления - вот что не ясно.
     
  17. zvezdochiot

    zvezdochiot Форумчанин

    Откуда они известны?

    PS: Скопируй по значению "first iter" в "target", после этого копируй "second iter". И всё поймёшь.
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice