control net of the torus

I want to make a complete control net of a torus. However, the net is not closed. Can anyone solve this problem?

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]]


]1

• pts6 = Table[{(2 + 1 Cos[s])*Cos[t], (2 + 1 Cos[s])*Sin[t], 1 Sin[s]}, {s, -Pi, Pi, Pi/4}, {t, -Pi, Pi, Pi/4}]; You have to set an corresponding step size:pts6 = Table[{(2 + 1 Cos[s])*Cos[t], (2 + 1 Cos[s])*Sin[t], 1 Sin[s]}, {s, -Pi, Pi, Pi/4}, {t, -Pi, Pi, Pi/4}]; – Daniel Huber Oct 27 '20 at 11:06
• Thank you for your explain, and now i already get it! – user75419 Oct 27 '20 at 11:31

Ulrich's solution fully answers the question, however, there's a problem with the surface created by BSpliceFunction. Notice that the surface is not a torus, and there's a break at the interior radius (there's a sharp shadow which should be smooth). Use pts6 from Ulrich's solution, and f from the question.

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}]]


The view from above shows the mesh is unevenly spaced and the surface is not a torus. The cross-section is not circular.

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"]


When we use the BSplineFunction with the SplineClosed option, the control points must not be closed. BSpineFunction completes the surface by connecting the boundaries. Fix the problem by redefining the spline function as f2 to remove the redundant end points. The result is a torus.

f2 = BSplineFunction[Most[pts6][[All, ;; -2]], SplineClosed -> {True, True}];
ParametricPlot3D[f2[s, t], {s, 0, 1}, {t, 0, 1}, ViewPoint -> {0, 0, \[Infinity]}


Here's the corrected view of the control points with the torus, compared to the original graphic.

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}]]


The definition of the controlpoints is wrong. {s,-Pi,Pi} inside Table creates an s-grid {_pi,-Pi+1,-Pi+2,...} which doesn't contain the last point Pi.

Redefine the controlpoints to

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]}]

• Really appreciate your explaination on it, thank you very much! – user75419 Oct 27 '20 at 11:32