Положение точки относительно Кривой Безье

Автор сказал (по предоставленной вами ссылке): «Я думаю, вы можете безопасно использовать их, пока не появится какая-нибудь официальная библиотека Boost». Откладывать изменение интерфейса до тех пор, пока «атомарные функции не появятся в C ++ 0x».

Что бы вы ни использовали сегодня, вы, вероятно, захотите перейти на новую std:: функциональность, когда она все равно будет доступна.

Бустер обычно довольно хорош, похоже, он используется в реализации выпущенной библиотеки Буста. Я также испытывал желание использовать эту реализацию несколько раз.

Я бы пошел на это.

9
задан rafek 29 May 2009 в 08:00
поделиться

5 ответов

Вы можете определить ближайшую точку по кривой Безье кривой с довольно простым алгоритмом (относящимся к k-subdivision. Алгоритм ДеКастледжу). Посмотрите на графические жемчужины, если вам нужна конкретика.

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

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

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

Извините, если мои условия неверны. Прошло некоторое время с тех пор, как мне пришлось что-то делать с Безье

. Было бы проще нарисовать картинку;)

5
ответ дан 4 December 2019 в 23:07
поделиться

Если вы просто хотите, чтобы ваш объект двигался по кривой (как вы говорите в своем комментарии), почему бы вам просто не переместить объект с помощью параметрического уравнения? См. Эту статью

1
ответ дан 4 December 2019 в 23:07
поделиться

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

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

0
ответ дан 4 December 2019 в 23:07
поделиться

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

Это то, что вы хотите, или я полностью потерял?

0
ответ дан 4 December 2019 в 23:07
поделиться

Вот математика для неявной кубической и квадратичной кривой Безье.

1
ответ дан 4 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

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