Как я могу сделать это для кубических Безье? - PullRequest
0 голосов
/ 03 июля 2010

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

for(float i = 0; i < 1; i += 0.04)
{
   interpolate A, a.handle to B.handle, B at time i
}

Проблема не в том, насколько короткое расстояние или большое расстояние между точками А и В, оно всегда дает одинаковое количество точек. Как я мог это сделать, чтобы он всегда выглядел хорошо, но только интерполировал столько, сколько должен. Пример: если расстояние (A, B) равно 40, то оно может только подразделиться как 15 раз, но тогда, если расстояние (A, B) равно 20, оно может только подразделить 7 раз и т. Д. Как я могу сделать это как функцию качества, если :

float GetThreshold(float distance, float quality)
{
}

Или что-то в этом роде. Спасибо

1 Ответ

4 голосов
/ 03 июля 2010

Что вы, вероятно, хотите исследовать, так это алгоритм адаптивного пошагового перехода.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...