rete di controllo del toro

Oct 27 2020

Voglio creare una rete di controllo completa di un toro. Tuttavia, la rete non è chiusa. Qualcuno può risolvere questo problema?

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

Risposte

2 creidhne Nov 04 2020 at 00:27

La soluzione di Ulrich risponde pienamente alla domanda, tuttavia, c'è un problema con la superficie creata da BSpliceFunction. Si noti che la superficie non è un toro e c'è un'interruzione nel raggio interno (c'è un'ombra netta che dovrebbe essere liscia). Utilizzare pts6dalla soluzione di Ulrich e fdalla domanda.

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 vista dall'alto mostra che la mesh è spaziata in modo non uniforme e la superficie non è un toro. La sezione trasversale non è circolare.

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

Quando usiamo la BSplineFunctioncon l' SplineClosedopzione, i punti di controllo non devono essere chiuse. BSpineFunctioncompleta la superficie collegando i confini. Risolvi il problema ridefinendo la funzione spline f2per rimuovere i punti finali ridondanti. Il risultato è un toro.

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

Ecco la vista corretta dei punti di controllo con il toro, rispetto alla grafica originale.

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 definizione dei punti di controllo è sbagliata. {s,-Pi,Pi}inside Tablecrea una griglia a s {_pi,-Pi+1,-Pi+2,...}che non contiene l'ultimo punto Pi.

Ridefinire i punti di controllo in

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