Найти радиус (или кривизну) в точке bspline, используя geomdl / nurbs - PullRequest
0 голосов
/ 13 июня 2019

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

Я определил трехмерную линию bspline (взятую из SolidWorks (откуда она взялась)не актуально)) в геомдл.Я могу оценить любую точку на сплайне, используя Curve.evaluate_single ().Похоже, это работает правильно.Я проверил возвращенные точки по модели SolidWorks, поэтому я предполагаю, что правильно реализовал bspline в nurbs.

Мне нужно найти радиус в различных точках вдоль этой кривой.Из моего поиска в Google я думаю, что хочу использовать Curve.derivatives (), чтобы вычислить мгновенную кривизну в этой точке.Но я не понимаю, как получить результаты Curve.derivatives () в радиус.

Итак, ниже приведен результат Curve.derivatives (SomePointOnPath, 4):

[   [74.66019681782404, 131.77035668055586, 19.88498274391211],
    [-2719.7097781710354, -598.8099790539873, -711.5032638750225],
    [-5384.519486543373, 1273.8662545231637, 19431.220551950217],
    [93757.48746982217, -22247.397114396095, 31343.52746776864],
    [0.0, 0.0, 0.0]]

Делая точки маленьким шагом по обе стороны от этой точки, я вычислил радиус в этой точке, чтобы он был около 409 (решение для радиуса круга с учетом 3 точек)

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

Я ожидаю, что радиус в этой конкретной точке будет около 409.

Мой фундаментальный вопрос состоит из двух частей:

Какие результаты говорят мне.Что они означают.

Как использовать эти результаты для расчета радиуса в этой точке.

1 Ответ

1 голос
/ 15 июня 2019

Радиус кривизны кривой можно вычислить как | C '| ^ 3 / | C' XC "|, где C 'и C" - первый и второй производные векторы, X - оператор перекрестного произведения, а | . | это величина вектора. Итак, вам понадобятся первая и вторая производные в этой точке, чтобы вычислить радиус кривизны.

Curve.derivatives (SomePointOnPath, 4) возвращает первые 4 производных кривой, а 0-я производная - это положение точки на кривой. Следовательно, первое производное представляет собой [-2719.7097781710354, -598.8099790539873, -711.5032638750225], а второе производное представляет собой [-5384.519486543373, 1273.8662545231637, 19431.220551950217]. Таким образом, мы можем использовать эти два вектора для наших вычислений и получить радиус кривизны 408,9176414, который близок к вашему расчетному значению 409.

Что касается примечания, вы можете просто передать '3' в качестве 2-го аргумента Curve.derivatives (), поскольку 3-й вектор дериватов не используется при вычислении радиуса кривизны.

...