сеть управления тором
Я хочу сделать из тора полную управляющую сеть. Однако сеть не закрывается. Кто-нибудь может решить эту проблему?
pts6 = Table[{(2 + 1 Cos [s])*Cos [t], (2 + 1 Cos [s])*Sin[t], 1 Sin[s]},
{s, -Pi, Pi}, {t, -Pi, Pi}];
f = BSplineFunction[pts6, SplineClosed -> {True, True}];
Show[
Graphics3D[{PointSize[Large], Black, Map[Point, pts6]}],
Graphics3D[{Gray, Line[pts6], Gray, Line[Transpose[pts6]]}],
ParametricPlot3D[f[s, t], {s, 0, 1}, {t, 0, 1}, AxesLabel -> Automatic]]
Ответы
Решение Ульриха полностью отвечает на вопрос, однако есть проблема с поверхностью, созданной BSpliceFunction. Обратите внимание, что поверхность - не тор, и на внутреннем радиусе есть разрыв (есть резкая тень, которая должна быть гладкой). Используйте pts6из решения Ульриха и fиз вопроса.
pts6 = Table[{(2 + Cos[t])*Cos[s], (2 + Cos[t])*Sin[s], Sin[t]}, {s,
Subdivide[-Pi, Pi, 6]}, {t, Subdivide[-Pi, Pi, 6]}];
f = BSplineFunction[pts6, SplineClosed -> {True, True}];
g1 = Show[Graphics3D[{PointSize[Large], Black, Map[Point, pts6]}],
Graphics3D[{Thick, Gray, Line[pts6], Line[Transpose[pts6]]}],
ParametricPlot3D[f[s, t], {s, 0, 1}, {t, 0, 1}]]
Вид сверху показывает, что сетка неравномерно расположена, а поверхность не является тором. Поперечное сечение не круглое.
ParametricPlot3D[f[s, t], {s, 0, 1}, {t, 0, 1},
ViewPoint -> {0, 0, \[Infinity]},
PlotLabel -> "non-toroidal surface"]
ParametricPlot3D[f[s, t], {s, 0, 1}, {t, 0, 1},
RegionFunction -> Function[{x, y, z, u, v}, 0 <= y <= 2],
BoundaryStyle -> Black, Axes -> True,
PlotLabel -> "non-circular cross-section"]
Когда мы используем BSplineFunctionс SplineClosedопцией, контрольные точки не должны быть закрыты. BSpineFunctionзавершает поверхность, соединяя границы. Устраните проблему, переопределив функцию сплайна, f2чтобы удалить избыточные конечные точки. В результате получился тор.
f2 = BSplineFunction[Most[pts6][[All, ;; -2]], SplineClosed -> {True, True}];
ParametricPlot3D[f2[s, t], {s, 0, 1}, {t, 0, 1}, ViewPoint -> {0, 0, \[Infinity]}
Вот исправленный вид контрольных точек с тором по сравнению с исходным рисунком.
g2 = Show[Graphics3D[{PointSize[Large], Black, Map[Point, Most@pts6]}],
Graphics3D[{Thick, Gray, Line[pts6], Line[Transpose[pts6]]}],
ParametricPlot3D[f2[s, t], {s, 0, 1}, {t, 0, 1}]]
Определение контрольных точек неверно. {s,-Pi,Pi}inside Tableсоздает s-сетку {_pi,-Pi+1,-Pi+2,...}, не содержащую последней точки Pi.
Переопределите контрольные точки, чтобы
pts6 = Table[{(2 + 1 Cos[s])*Cos[t], (2 + 1 Cos[s])*Sin[t],1 Sin[s]}, {s, Subdivide[-Pi, Pi, 10]}, {t,Subdivide[-Pi, Pi, 10]}]