red de control del toro

Oct 27 2020

Quiero hacer una red de control completa de un toro. Sin embargo, la red no está cerrada. ¿Alguien puede resolver este 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

Respuestas

2 creidhne Nov 04 2020 at 00:27

La solución de Ulrich responde completamente a la pregunta, sin embargo, hay un problema con la superficie creada por BSpliceFunction. Observe que la superficie no es un toro y hay una ruptura en el radio interior (hay una sombra aguda que debería ser suave). Utilice pts6de la solución de Ulrich y fde la pregunta.

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 desde arriba muestra que la malla está espaciada de manera desigual y la superficie no es un toro. La sección transversal no es 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"]

Cuando usamos la BSplineFunctioncon la SplineClosedopción, los puntos de control no deben estar cerrados. BSpineFunctioncompleta la superficie conectando los límites. Solucione el problema redefiniendo la función spline f2para eliminar los puntos finales redundantes. El resultado es 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]}

Aquí está la vista corregida de los puntos de control con el toro, en comparación con el gráfico original.

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 definición de los puntos de control es incorrecta. {s,-Pi,Pi}adentro Tablecrea una cuadrícula en S {_pi,-Pi+1,-Pi+2,...}que no contiene el último punto Pi.

Redefinir los puntos de control para

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