filet de contrôle du tore

Oct 27 2020

Je veux faire un réseau de contrôle complet d'un tore. Cependant, le réseau n'est pas fermé. Quelqu'un peut-il résoudre ce problème?

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

Réponses

2 creidhne Nov 04 2020 at 00:27

La solution d'Ulrich répond entièrement à la question, cependant, il y a un problème avec la surface créée par BSpliceFunction. Remarquez que la surface n'est pas un tore et qu'il y a une cassure au rayon intérieur (il y a une ombre nette qui devrait être lisse). Utilisation à pts6partir de la solution d'Ulrich et fde la 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}]]

La vue de dessus montre que le maillage est espacé de manière inégale et que la surface n'est pas un tore. La section transversale n'est pas circulaire.

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

Lorsque nous utilisons l' option BSplineFunctionavec l' SplineClosedoption, les points de contrôle ne doivent pas être fermés. BSpineFunctioncomplète la surface en reliant les limites. Résolvez le problème en redéfinissant la fonction spline f2afin de supprimer les points d'extrémité redondants. Le résultat est un tore.

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

Voici la vue corrigée des points de contrôle avec le tore, par rapport au graphique d'origine.

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

1 UlrichNeumann Oct 27 2020 at 18:08

La définition des points de contrôle est erronée. {s,-Pi,Pi}à l'intérieur Tablecrée une grille en S {_pi,-Pi+1,-Pi+2,...}qui ne contient pas le dernier point Pi.

Redéfinissez les points de contrôle pour

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