2016-01-24 6 views
0

Так что мне нужен метод записи для создания кривой между двумя точками, причем каждая точка имеет нормализованный вектор, указывающий в произвольном направлении. Я пытаюсь разработать такой метод, но не смог обернуть голову вокруг математики.Создание кривой между двумя точками, каждая с нормализованными векторами

Здесь, так как картинка стоит тысячи слов, это то, что мне нужно:

enter image description here

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

Также я использую csharp, язык не имеет большого значения.

+0

Касательная диаграмма? –

+0

Любой язык в частности? – Will

+1

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

ответ

1

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

Длина дуги не может быть вычислена аналитически, и вам понадобятся численные методы. Это other question дает вам полезную информацию.

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^