red de control del toro
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]]
Respuestas
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}]]
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]}]