Saltar al contenido

Tikzpicture: termine de dibujar una línea curva para una rebanada de pastel

Si hallas alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un entorno de testing antes subir el código al proyecto final.

Solución:

Si utiliza tikz-3dplotno tiene que adivinar las curvas y puede ajustar los ángulos de visión a voluntad.

documentclass[tikz,border=3.14mm]standalone
usepackagetikz-3dplot
begindocument
tdplotsetmaincoords7560
begintikzpicture[tdplot_main_coords]
beginscope[canvas is xy plane at z=0,name prefix=bot-]
 draw (0,0) coordinate (O) -- (4,0) coordinate (A) arc (0:60:4) coordinate
 (B);
endscope 
beginscope[canvas is xy plane at z=2,name prefix=top-]
 draw[fill=blue!20] (0,0) coordinate (O) -- (4,0) coordinate (A) arc (0:60:4) coordinate
 (B) -- cycle;
endscope 
 draw foreach X in O,A,B
 (bot-X) -- (top-X);
endtikzpicture
enddocument

ingrese la descripción de la imagen aquí

documentclass[tikz,border=3.14mm]standalone
usepackagetikz-3dplot
begindocument
foreach X in 89,88,...,60,61,62,...,88
tdplotsetmaincoords70+10*sin(6*X)X
pgfmathsetmacroxmin0
pgfmathsetmacroxmax0
pgfmathsetmacroymin0
pgfmathsetmacroymax0
begintikzpicture[tdplot_main_coords]
    ifdefinedfigbbrelax
    path figbb;
    fi
    beginscope[canvas is xy plane at z=0,name prefix=bot-]
     draw (0,0) coordinate (O) -- (4,0) coordinate (A) arc (0:60:4) coordinate
     (B);
    endscope 
    beginscope[canvas is xy plane at z=2,name prefix=top-]
     draw[fill=blue!20] (0,0) coordinate (O) -- (4,0) coordinate (A) arc (0:60:4) coordinate
     (B) -- cycle;
    endscope 
    draw foreach X in O,A,B (bot-X) -- (top-X);
    path let p1=(current bounding box.south west),
    p2=(current bounding box.north east)
    in pgfextra%
    pgfmathsetmacroxminmin(x1,xmin)
    pgfmathsetmacroxmaxmax(x2,xmax)
    pgfmathsetmacroyminmin(y1,ymin)
    pgfmathsetmacroymaxmax(y2,ymax)
    xdefxminxmin pt
    xdefxmaxxmax pt    
    xdefyminymin pt
    xdefymaxymax pt    
    ; 
endtikzpicture
makeatletter               
edeffigbb(xmin,ymin) rectangle (xmax,ymax)
immediatewrite@mainauxxdefstringfigbbfigbbrelax
makeatother
enddocument

ingrese la descripción de la imagen aquí

Si desea permitir ángulos de visión arbitrarios, debe distinguir algunos casos como en esta respuesta que le proporciona el resto del pastel (de queso) (excepto la pieza robada por el mouse; -).

Como esto ?

Para evitar tener que calcular manualmente las coordenadas de los puntos, utilizo el posicionamiento relativo de los puntos con la sintaxis --++. Esta sintaxis indica que para obtener las coordenadas del siguiente punto, sumamos el punto precedente (0,-1.24)

(4.23,-1.55) --++ (0,-1.24)

es equivalente a

(4.23,-1.55) -- (4.23,-2.79)

Por supuesto 4.23 + 0 = 4.23 y -1.55 + (-1.24) = -2.79

captura de pantalla

documentclass[tikz,border=5mm]standalone

begindocument
begintikzpicture
draw[thick,color=black,fill=gray!30] (0,0) --  (-20:4.5) arc(-20:-50:4.5) -- cycle;
draw[thick,color=black,yshift=-1.24cm] (-20:4.5) arc(-20:-50:4.5) -- (0,0);
draw[thick,color=black] (4.23,-1.55) --++ (0,-1.24);
draw[thick,color=black] (2.9,-3.43) --++ (0,-1.24);
draw[thick,color=black] (0,0) --++ (0,-1.24);

endtikzpicture
enddocument

Un ejemplo más: en el dibujo, los ángulos se consideran en orden inverso. Para líneas verticales, la coordenada está definida, de modo que ahora solo es necesaria una coordenada para determinar la altura del corte:

documentclass[tikz, margin=3mm]standalone

begindocument
    begintikzpicture[
every path/.style = thick, line join=round % style of lines
                        ]
draw[fill=gray!30] (0, 0) --   (-50:4.5) coordinate (a1) arc(-50:-20:4.5) coordinate (a2) -- cycle;
draw      (0,0) -- (0,-2) % determine height of slice
                           -- ++(-50:4.5) coordinate (b1) arc(-50:-20:4.5) coordinate (b2);
draw      (a1) -- (b1)    (a2) -- (b2);
    endtikzpicture
enddocument

ingrese la descripción de la imagen aquí

Si tienes alguna indecisión o capacidad de progresar nuestro sección puedes realizar una nota y con gusto lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *