Кривые Безье (Путь) - Более менее постоянная скорость при прохождении через Т - PullRequest
2 голосов
/ 05 января 2012

Строгие факты:

  • К сожалению, я не математик-гуру
  • Я создаю путь Безье, рисуя его пальцем на экране
  • У меня есть объект, который следует по этому пути
  • Я пересекаю этот путь, когда движок вызывает Отметьте (float fDelta ) на объекте следующим образом:

if ( m_fBezierTime <1.0) {</p>

m_fBezierTime + = 0,1f * fDelta ;

m_vPosition = m_Bezier.CalculatePosition ( m_fBezierTime );

}

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

  • Я слышал, что это нормальное поведение Безье

Теперь вопрос:

  • Как я могу сделать эту скорость по крайней мере «близкой» или «~» к постоянной?

Спасибо за любые комментарии к этому.

1 Ответ

2 голосов
/ 05 января 2012

Простое и быстрое решение: получите кучу регулярно распределенных точек на кривой Безье (например, 10 точек на кривую), как вы делаете сейчас, и измерьте евклидово расстояние между этими точками (то есть: sqrt ((x_1 - x_2)² + (y_1 - y_2) ²…)).Это должно быть хорошей мерой для длины полной кривой, которую вы можете использовать, чем для перемещения с почти постоянной скоростью.

Здесь происходит больше изящных вещей: http://steve.hollasch.net/cgindex/curves/cbezarclen.html, но этоможет быть излишним.

...