Gráficos 3D

 

Figueroa, GMora, W..

  Inicio  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18 

 

Sector de una Superficie

Vamos a describir como se puede implementar un trozo de superficie (que no es necesariamente generada por una curva) usando su proyección. La idea es observar una manera de implementar un gráfico con el próposito de usar métodos similares para otros tipos de superficies que no son accesibles directamente con las herramientas implementadas en Mathematica .


EJEMPLO

Consideremos el problema de dibujar el sólido $Q$ limitado por el paraboloide $z=x^2+y^2$ el plano $z-y=6$, en  el primer octante.

 
  Figura 18

Para implementar este gráfico debemos implementar cada una de sus partes por separado

  1. Paraboloide.


    En el caso de este sector de paraboloide, una idea para su  implementación es hacer una especie de abanico con vértice en la parte más alta, como se muestra en la figura que sigue.

     


     
      Figura 19.

    La curva $C$ se proyecta en la curva $C1$; las trazas que conforman el abanico son una deformación de la curva $C$ y por tanto, las curvas de nivel correspondientes son una deformación de la curva $C1$

    Bien, vamos a hacer el tejido de polígonos en la región de proyección del trozo de paraboloide, en el plano $XY$, y luego proyectar estos polígonos al paraboloide.

    Para hacer este tejido, vamos a tomar la curva $C1$ y deformarla, multiplicando su coordenada $x$ por un parámetro que toma valores entre $0$ y $1$. Esto produce un conjunto de curvas, todas con el mismo número de puntos. Luego, formamos los polígonos de la telaraña uniendo cada par de puntos de una curva $C_i$ con el respectivo par de puntos en la curva siguiente $C_{i+1}$. Luego esta 'telaraña' la proyectaremos al paraboloide.

    La curva $C1$ de intersección entre el plano $z-y=6$ con el paraboloide $z=x^2+y^2$, proyectada en el plano $XY$,  tiene ecuación $x^2+(y-1/2)^2=25/4$, o sea, un círculo de radio $5/2$. Su parametrización (en el primer octante) en el plano $XY$ es


    \begin{displaymath}C1: \; \; \left(\frac{5}{2}\,\mbox{cos}t, \frac{1}{2}+ \frac{...
...ight), \; \; \;
t \in \left[-0.201358,\; \frac{\pi}{2}\right] \end{displaymath}

    Para obtener una familia de curvas a partir de $C1$, usamos la función

    f[ra_, t_, s_] = {s*ra*Cos[t], 1/2 + ra*Sin[t], 0}, (* s en [0,1] *)

    y la familia de curvas $C_i$ se genera con

     


    f[ra_, t_, s_] = {s*ra*Cos[t], 1/2 + ra*Sin[t], 0}, (* s en [0,1] *)
    angIni = -0.201358;
        dt = (-angIni + Pi/2)/50;      (*de angIni a Pi/2 en 50 pasos*)
    curvas = Table[f[5/2, i, j], {j, 0, 1, 0.1}, {i, angIni, Pi/2, dt}];
              (*dt no ajusta bien, asi que agregamos la ultima curva *)
    AppendTo[curvas, Table[{5/2*Cos[t], 1/2 + 5/2*Sin[t], 0}, {t, angIni, Pi/2, dt}]];

        

Las curvas y la 'telaraña' se muestran en las siguientes figuras, junto con el código necesario

 


         (*numero curvas nc*)
          nc = Length[curvas];
                 (*todas las curvas tienen np puntos*)
          np = Length[curvas[[1]]];
          curvaC = Line[curvas[[nc]]];
	         (*curvas ci*)
          netC = Table[Line[curvas[[ci]]], {ci, 1, nc - 1}];

                 (*  cada poligono esta formado por dos puntos en la curva ci
                     curvas[[ci, pi]], curvas[[ci, pi+1]]
                     y dos puntos en la curva ci+1
                     curvas[[ci + 1, pi]], curvas[[ci + 1, pi + 1]], *)

          netP = Table[Polygon[{curvas[[ci, pi]],
                                curvas[[ci + 1, pi]],
                                curvas[[ci + 1, pi + 1]],
                                curvas[[ci, pi + 1]],
                                curvas[[ci, pi]]
                              }], {pi, 1, np - 1}, {ci, 1,nc - 1}];

            g = Graphics3D[{ Ejes3D[-1, 4, -1, 4, -0.1, 3],
                             netP,
                             RGBColor[1, 0, 0],
                             AbsoluteThickness[2],
                             curvaC
                            }, Boxed -> False,
                               ViewPoint -> {2.580, 1.056, 1.918}
                           ];
                Show[g];

 



 

Figura 19.
 

Luego, cada polígono es proyectado sobre el paraboloide, para hacer esto, redefinimos la función f[ra_, t_, s_]

 


  f[ra_, t_, s_] = {s*ra*Cos[t],1/2 + ra*Sin[t], (s*ra*Cos[t])^2 + (1/2 + ra*Sin[t])^2};
  corteParaboloide = Table[Polygon[{     curvas[[ci, pi]],
                                         curvas[[ci + 1, pi]],
                                         curvas[[ci + 1, pi + 1]],
                                         curvas[[ci, pi + 1]],
                                         curvas[[ci, pi]]
                                   }], {pi, 1, np - 1}, {ci, 1,nc - 1}];

    g = Graphics3D[{ Ejes3D[-1, 4, -1, 4, -1, 9],
                     SurfaceColor[RGBColor[1, 1, 0]],
                     corteParaboloide
                     }, Boxed -> False,
                        ViewPoint -> {2.493, 0.673, 2.186}
                  ];
        Show[g];


 

   

 Figura 20.

  1. El plano $z+y=6$
    Ya que en este caso el plano comparte la proyección sobre, el plano $XY$, con el paraboloide, podemos aprovechar la construcción del paraboloide para construir el plano. Nada más se debe modificar la coordenada 'z' de la función f[ra_, t_, s_].  Agregamos el siguiente código

     


               f[ra_, t_, s_] = {s *ra*Cos[t], 1/2 + ra*Sin[t],  6 + 1/2 + ra*Sin[t]};
               curvas = Table[f[5/2, i, j], {j, 0, 1, 0.1}, {i, angIni, Pi/2, dt}];
               AppendTo[curvas,
                         Table[{5/2*Cos[t],
                                1/2 + 5/2*Sin[t],
                               (5/2*Cos[t])^2 + (1/2 + 5/2*Sin[t])^2},
                               {t, angIni, Pi/2, dt}]];
                planoT = Table[Polygon[{curvas[[ci, pi]],
                                        curvas[[ci + 1, pi]],
                                        curvas[[ci + 1, pi + 1]],
                                        curvas[[ci, pi + 1]],
                                        curvas[[ci, pi]]
                                        }], {pi, 1, np - 1}, {ci, 1,nc - 1}];

              g = Graphics3D[{ Ejes3D[-1, 4, -1, 4, -1, 9],
                               SurfaceColor[RGBColor[1, 1, 0]],
                               corteParaboloide,
                               SurfaceColor[RGBColor[0.501961, 1, 0]],
                               planoT
                             }, Boxed -> False,
                                ViewPoint -> {2.493, 0.673, 2.186}
                      ];

               Show[g];



                
    

     
     
     Figura 21.
     
     

  2. Los planos laterales,en los planos $XZ$ y $YZ$, son más sencillos. En el plano $XZ$, el plano va de la curva $z=x^2$ hasta la curva $z=6$ y en el plano $YZ$ el plano va de la curva $z=y^2$ hasta la curva $z=y+6$. Simplemente hacemos una grupo de polígonos desde la curva de abajo hasta la curva de arriba. En el código que se agrega, se incluyen los bordes (curvas) del sólido.

     



              (*-------------bordes ----------------*)
                cxz = Line[Table[{t, 0, t^2}, {t, 0, Sqrt[6], 0.1}]];
                cyz = Line[Table[{0, t, t^2}, {t, 0, 3, 0.1}]];
                cpl1 =Line[Table[{5/2*Cos[t],
                                  1/2 + 5/2*Sin[t],
                                  (5/2*Cos[t])^2 + (1/2 + 5/2*Sin[t])^2}
                               ,{t,angIni, Pi/2, dt}]];
                cpl2 = Line[{{Sqrt[6], 0, 6}, {0, 0, 6}, {0, 3, 9}}];
             (*-------------paredes------------------*)
                c2[y1_] = {0, y1, 6 + y1};
                c1[y1_] = {0, y1, y1^2};
                di = 0.1;
                paredyz =Table[Polygon[{c1[i], c1[i + di],
                                        c2[i + di], c2[i], c1[i]}]
                               ,{i, 0,3 - di, di}];
    
                c2[x1_] = {x1, 0, 6};
                c1[x1_] = {x1, 0, x1^2};
                paredxz =Table[Polygon[{c1[i], c1[i + di], c2[i + di], c2[i], c1[i]}]
                                ,{i, 0,Sqrt[6], di}];
    
    
              g = Graphics3D[{ Ejes3D[-1, 4, -1, 4, -1, 9],
                               SurfaceColor[RGBColor[1, 1, 0]],
                               corteParaboloide,
                               SurfaceColor[RGBColor[0.501961, 1, 0]],
                               planoT,
                               SurfaceColor[RGBColor[0.501961, 0.501961, 1]],
                               paredyz, paredxz,
                               cxz, cyz, cplano1, cplano2
                             }, Boxed -> False,
                                ViewPoint -> {2.493, 0.673, 2.186}
                      ];
             Show[g];

     


     
  3. Como un  ejemplo curioso, presentamos una implementación de la botella de Klein [15]

     


    Figura 22.

    Fue generada con este código [15]



    color = RGBColor[0, 0, 0.627451];
    bot = {(2.5 + 1.5 Cos[v]) Cos[u], (2.5 + 1.5 Cos[v]) Sin[u], -2.5 Sin[v], EdgeForm[]};


    mid = {(2.5 + 1.5 Cos[v]) Cos[u], (2.5 + 1.5 Cos[v]) Sin[u], 3v, EdgeForm[]};


    han = {2 - 2 Cos[v] + Sin[u], Cos[u], 3v, EdgeForm[]};


    top = {2 + (2 + Cos[u]) Cos[v], Sin[u], 3Pi + (2 + Cos[u]) Sin[v], EdgeForm[]};


    bottom = ParametricPlot3D[bot, {u, 0, 2Pi}, {v, 0, Pi}, PlotPoints -> {32, 16}                         ,AmbientLight -> color, Boxed -> False, Axes -> False];
    middle = ParametricPlot3D[mid, {u, 0, 2Pi}, {v, 0, Pi}, PlotPoints -> {32, 16},
                              AmbientLight -> color, Boxed -> False, Axes -> False];
    topper = ParametricPlot3D[top, {u, 0, 2Pi}, {v, 0, Pi}, PlotPoints -> {32, 16}                         ,AmbientLight -> color, Boxed -> False, Axes -> False];
    handle = ParametricPlot3D[han, {u, 0, 2Pi}, {v, 0, Pi},
                              PlotPoints -> {32, 16}, AmbientLight -> color,
                              Boxed -> False, Axes -> False];
    todo = Show[{handle, topper, middle, bottom}, Boxed -> False,
                 Axes -> False, AmbientLight -> color]


     

    
    
    


Revista digital Matemática, Educación e Internet.
Derechos Reservados