Интерполяция последовательности точки

Мне кажется, вам нужен только один взгляд.

^(?=(?:\D*\d){3}\D*$)(?:[^A-Z]*[A-Z]){2}[^A-Z]*$
  • \d - short для цифры. \D является отрицанием \d и соответствует незначению
  • (?= открывает положительный lookahead . (?: открывает группу захвата .
  • В начале ^ start (?=(?:\D*\d){3}\D*$) смотрит ровно на три цифры, пока $ end .
  • Если условие успешно (?:[^A-Z]*[A-Z]){2}[^A-Z]* соответствует строке с ровно двумя верхними альфами, пока $ не закончится. [^ открывает отрицательный класс символов .

Демонстрация в regex101

Если вы хотите разрешить только буквенно-цифровые символы, замените [^A-Z] на [a-z\d] , как в этой демонстрации .

10
задан Chris 26 September 2008 в 19:51
поделиться

8 ответов

Шлиц Catmull-Rom, как гарантируют, пройдет через все контрольные точки. Я нахожу, что это более удобно, чем попытка скорректировать промежуточные контрольные точки для других типов шлицов.

Этот PDF Christopher Twigg имеет хорошее краткое введение в математику шлица. Лучшее сводное предложение:

Шлицы Catmull-Rom имеют непрерывность C1, локальное управление и интерполяцию, но не лежат в выпуклой оболочке их контрольных точек.

Сказанный иначе, если точки указывают на резкий изгиб направо, шлиц будет управлять банком оставленный прежде, чем повернуться направо (существует изображение в качестве примера в том документе). Плотность тех заходит управляемый в этом случае с помощью его tau параметра в матрице в качестве примера.

Вот другой пример с некоторым загружаемым кодом DirectX.

9
ответ дан 3 December 2019 в 20:44
поделиться

Одним путем является Lagrange полином, который является методом для создания полинома, который пройдет все точки определенных данных.

В течение моего первого года в университете я записал немного инструмента для выполнения в этом 2D, и можно найти его на этой странице, это называют Lagrange решателем. Страница Википедии также имеет демонстрационную реализацию.

То, как это работает, таким образом: у Вас есть полином n-порядка, p(x), где n является числом очков, Вы имеете. Это имеет форму a_n x^n + a_(n-1) x^(n-1) + ...+ a_0, где _ нижний индекс, ^ питание. Вы затем превращаете это в ряд одновременных уравнений:

p(x_1) = y_1
p(x_2) = y_2
...
p(x_n) = y_n

Вы преобразовываете вышеупомянутое в расширенную матрицу и решаете для коэффициентов a_0 ... a_n. Затем у Вас есть многочлен, который проходит все точки, и можно теперь интерполировать между точками.

Отметьте однако, это не может удовлетворить Вашей цели, поскольку она не предлагает способа скорректировать искривление и т.д. - Вы застреваете с единым решением, которое не может быть изменено.

3
ответ дан 3 December 2019 в 20:44
поделиться

Необходимо смотреть на B-сплайны. Их преимущество перед Кривыми Безье состоит в том, что каждая часть только зависит от локальных точек. Так перемещение точки не имеет никакого эффекта на части кривой, которые являются далеко, где "далеко" определяется параметром шлица.

Проблема с многочленом Langrange состоит в том, что добавление точки может иметь экстремальные эффекты на на вид произвольные части кривой; нет никакой "локальности", любят описанный выше.

2
ответ дан 3 December 2019 в 20:44
поделиться

Вы посмотрели на команду шлица Unix? Это может быть принуждено в выполнение, что Вы хотите?

1
ответ дан 3 December 2019 в 20:44
поделиться

К сожалению, Lagrange или другие формы полиномиальной интерполяции не будут работать над произвольным набором точек. Они только работают над набором где в одном размере, например, x

кси <xi+1

Для arbitary набора точек, например, курса полета самолета, где каждая точка (долгота, широта) пара, Вы будете более обеспечены просто моделирование поездки самолета с текущей долготой и широтой и скоростью. Путем корректировки уровня, на котором самолет может повернуться (его угловая скорость) в зависимости от того, как близко это к следующему waypoint, можно достигнуть плавной кривой.

Получающаяся кривая не была бы математически значительной, ни дала бы Вам bezier контрольные точки. Однако алгоритм был бы в вычислительном отношении прост независимо от количества waypoints и мог произвести интерполированный список точек при произвольной гранулярности. Это также не потребовало бы, чтобы Вы обеспечили полный набор точек впереди, Вы могли просто добавить waypoints в конец набора как требуется.

1
ответ дан 3 December 2019 в 20:44
поделиться

В 3D графическом мире NURBS популярен. Дальнейшая информация легко погуглена.

0
ответ дан 3 December 2019 в 20:44
поделиться

Существует несколько алгоритмов для интерполяции (и exrapolating) между aribtrary (но финал) набор точек. Необходимо проверить числовые рецепты, они также включают реализации C++ тех алгоритмов.

1
ответ дан 3 December 2019 в 20:44
поделиться

Google "ортогональная регрессия".

Принимая во внимание, что методы наименьших квадратов пытаются минимизировать вертикальное расстояние между пригодной строкой и каждым f (x), ортогональная регрессия минимизирует перпендикулярные расстояния.

Приложение

В присутствии шумных данных почтенный алгоритм RANSAC стоит проверить также.

0
ответ дан 3 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: