Положение точки относительно кривой Безье - PullRequest
9 голосов
/ 28 мая 2009

У меня кривая Безье, заданная 4 точками. Мне нужно знать, находится ли точка на левой или правой стороне кривой Безье. Можете ли вы предложить мне алгоритм?

Редактировать: Я уверен, что способ, которым я генерирую , кривая Безье не будет образовывать петли.

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

Ответы [ 5 ]

5 голосов
/ 29 мая 2009

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

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

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

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

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

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

1 голос
/ 20 декабря 2009

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

1 голос
/ 28 мая 2009

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

0 голосов
/ 29 мая 2009

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

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

0 голосов
/ 28 мая 2009

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

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

...