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-3dplot
no 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
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
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
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
Si tienes alguna indecisión o capacidad de progresar nuestro sección puedes realizar una nota y con gusto lo estudiaremos.