Найти порядок контрольных точек в сплайне

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

Мы не знаем, как рассчитывается сама кривая, и на данный момент имеем только существующий набор контрольных точек, новую точку и то, находится ли эта точка на пути кривой.

Единственное возможное решение, которое я мог придумать, - итеративно проверить, находится ли точка на кривой, составленной из первых 2, 3, 4… точек кривой, и по наблюдаемым результатам определить, между какими существующими точками она принадлежит. Это похоже на довольно грубый способ решения проблемы, поэтому мне было интересно, знает ли кто-нибудь о лучших подходах?

Спасибо


person Zepee    schedule 21.10.2015    source источник


Ответы (1)


Для справки вот что мы сделали:

Gdi + GraphicsPath имеет функцию сглаживания пути до ряда точек, которые образуют отрезки прямой линии, которые, кажется, гарантируют включение исходных контрольных точек.

Таким образом, мы перебираем набор сглаженных линейных сегментов, проверяем совпадение новой точки по отношению к ним и отслеживаем, в каком «контрольном сегменте» мы находимся. Когда происходит совпадение, мы нашли наш целевой сегмент и можем добавить новую контрольную точку. между двумя, определяющими этот сегмент.

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

person Zepee    schedule 27.10.2015