Генерация функции плоскости/поверхности, на которой лежит заданный набор координат

StackOverflow https://stackoverflow.com/questions/919758

Вопрос

Это тоже связано с математикой.Но это полезно и в вычислениях.

Допустим, у вас есть 10 координат.(x1,y1)(x2,y2).....в 2D-пространстве.(т.е. в плоскости XY).Можем ли мы найти одну плавную кривую, проходящую по каждой координате?

Расширяя вопрос: если пространство трехмерное, можем ли мы найти уравнение гладкой поверхности, проходящей через заданный набор пространственных координат?

Есть ли библиотеки (на любом языке)\инструменты для выполнения таких вычислений?

Это было полезно?

Решение

Вам следует искать какую-нибудь библиотеку, реализующую NURBS (или Non Uniform Rational B-Splines).Это решит вашу проблему как в 2d, так и в 3d, поскольку 2d — это всего лишь частный случай 3d.

Грубо говоря, вас не интересует само уравнение, вас интересует только аппроксимация точек гладкими кривыми или поверхностями.Это делается путем поиска «контрольных точек» в 2D или 3D пространстве, которые умножаются на базовые функции B-сплайна.Библиотека NURBS сделает это за вас.

Ваше здоровье !

Редактировать:

Посмотри на Вот этот

Другие советы

вы всегда можете разместить полином 10-го порядка через точки.Однако это не обязательно то, что вы хотите сделать — установка плавной кривой с помощью серии сплайнов даст вам более красивый результат.тот подгонка по кривой Статья в Википедии дает хороший обзор различных вариантов.

В случае 2D вы запрашиваете подгонку кривой.Это действительно существует в Excel, где вы рисуете точки (я обычно использую разброс по XY, если у вас есть список x и y), а затем щелкаете правой кнопкой мыши по кривой.Выберите Добавить линию тренда.Там вы можете выбрать, какой тип функции вы хотите подогнать, и попросить Excel отобразить ее на изображении (вкладка «Параметры», установите флажок «Отображать уравнение на диаграмме»).Красиво и быстро.

В противном случае вы можете использовать Matlab и использовать lsqr (метод наименьших квадратов).Если вы хотите найти ближайший полином, который лучше всего описывает ваши данные, вы можете использовать функцию polyfit.Он использует метод наименьших квадратов, но возвращает коэффициенты.В Matlab имеется целый набор других алгоритмов для решения/нахождения «наилучших» приближений к системам линейных уравнений.Я упоминаю lsqr, потому что его проще всего реализовать самостоятельно, если у вас нет Matlab.С другой стороны, это для решения систем линейных уравнений — о ваших данных я ничего не знаю.

Посмотрите на сплайны

Поиск «библиотеки сплайн-интерполяции» может дать некоторые полезные подсказки для реализации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top