Извините, у меня нет Matlab, но это аналог Mathematica.Я думаю, что вы можете перевести это
Вместо того, чтобы иметь наклонный цилиндр, представленный в ответе Савитру , мы можем сделать версию, которая следует заданной кривой.
По сути, вам нужен набор окружностей, все ортогональные кривой f(x)
, которой вы пытаетесь следовать.Сначала определим круг:
Круг:
Предположим, что круг радиуса R
в плоскости, перпендикулярной единичному вектору w=(w1,w2,w3)
, проходит черезточка (X0,Y0,Z0)
.Эта плоскость определяется двумя единичными векторами u=(u1,u2,u3)
и v=(v1,v2,v3)
, которые перпендикулярны w
.Параметрическое уравнение круга:
x = X0 + R cos(theta) u1 + R sin(theta) v1
y = Y0 + R cos(theta) u2 + R sin(theta) v2
z = Z0 + R cos(theta) u3 + R sin(theta) v3
, где theta
изменяется в интервале от 0 до 2π.
Итак, теперь, когда мы определили круг, давайте определим трубку.
Трубка:
Чтобы определить поверхность, нам нужны два параметра, первый - theta
от круга.Вторым будет x
, если мы хотим следовать f(x)
.Все, что нам нужно сделать, это определить ортогональные векторы u
и v
.Мы знаем, что они ортогональны единичному вектору w
, и это не что иное, как касательная к f(x)
, полученная с первой производной.Таким образом, вы можете определить:
w = Normalize[{1,f'(x),0}]
u = Normalize[Cross[w,{0,0,1}]]
v = Cross[w,u]
Таким образом, ваше параметрическое уравнение становится:
x = x + R cos(theta) u1(x) + R sin(theta) v1(x)
y = f(x) + R cos(theta) u2(x) + R sin(theta) v2(x)
z = 0 + R cos(theta) u3(x) + R sin(theta) v3(x)
В Mathematica это выглядит так:
R=1
f[x_] := Sin[x]
w[x_] := Normalize[{1, f'[x], 0}]
u[x_] := Normalize[Cross[w[x], {0, 0, 1}]]
v[x_] := Cross[w[x], u[x]]
ParametricPlot3D[{x, f[x], 0} + R Cos[t] u[x] + R Sin[t] v[x], {x, 0, 2 Pi}, {t, 0, 2 Pi}]
примечание: вы можете легко расширить это, используя построение кадра Френе-Серре из векторов Tangent, Normal и BiNormal для кривой в трехмерном пространстве f(r)