Nuestro team redactor ha estado mucho tiempo buscando para dar solución a tu búsqueda, te dejamos la respuesta por eso esperamos serte de gran apoyo.
Solución:
Versión 1
Tu defines x
y y
para ser correcto a
y k
. No es la forma única y también es posible reducir el código con un macro.
documentclass[]scrartcl
usepackagetikz
usetikzlibrary3d
begindocument
begintikzpicture[x = (-0.65cm,-0.45cm),
y = (0.65cm,-0.45cm),
z = (0cm,0.8cm),
scale = 2]
beginscope[canvas is zy plane at x=5]
draw (0,0) coordinate (a1)
-- (3,2) coordinate (a2)
-- (3,4) coordinate (a3)
-- (2,5) coordinate (a4)
-- (0,4) coordinate (a5)--cycle ;
endscope
beginscope[canvas is zy plane at x=0]
path (0,0) coordinate (b1)
(3,2) coordinate (b2)
(3,4) coordinate (b3)
(2,5) coordinate (b4)
(0,4) coordinate (b5);
endscope
draw (b2)--(b3)--(b4)--(b5);
foreach i in 2,...,5
draw (ai)--(bi);
draw[dashed] (b5)--(b1)--(b2) (a1)--(b1);
endtikzpicture
enddocument
Versión 2 Cambié el nombre de los nodos. Bi
para los vértices de la cara de fondo y Fi
para los vértices de la cara frontal. Ahora creé un macro para definir los puntos. Debe dar las coordenadas, el coeficiente y el alfa (l’angle de fuite).
El código de la primera imagen es
begintikzpicture[scale=1.6]
definePrism(0,0),
(1,0),
(1,1),
(0,1)01.530
beginscope[x = (0cm,1cm),
y = (1cm,0),
z = (-ordz cm,-absz cm)]
beginscope[canvas is yz plane at x=0]
draw[dotted] (0,0) circle (1cm);
draw[<->] (1,0) arc (0:-90:1cm);
draw[dotted,blue] (0,0)--(0,-1);
node[text width=2cm] at (0.5,-2) fuite\ $alpha=30^circ$;
node[text width=2cm] at (-0.6,0.2) $ -kcos(alpha)$\
$ -ksin(alpha)$;
endscope
endscope
endtikzpicture
Ahora un ejemplo completo
documentclass[]scrartcl
usepackagetikz
usetikzlibrary3d
newcommand definePrism[5]
pgfmathsetmacroabsz#4*sin(#5) pgfmathsetmacroordz#4*cos(#5)
beginscope[x = (0cm,1cm),
y = (1cm,0),
z = (-ordz cm,-absz cm)]
beginscope[canvas is xy plane at z=#2]
path foreach coord [count=ni] in #1 coord coordinate (Bni);
endscope
beginscope[canvas is xy plane at z=#3]
path foreach coord [count=ni] in #1 coord coordinate (Fni);
endscope
endscope
begindocument
begintikzpicture[scale=1]
definePrism(0,0),
(3,2),
(3,4),
(2,5),
(0,2)08.745
draw (F1) foreach i in 2,...,5 --(Fi) -- cycle;
draw (B2)--(B3)--(B4);
draw[dashed] (B4)--(B5)--(B1)--(B2);
draw (F2)--(B2)
(F3)--(B3)
(F4)--(B4);
draw[dashed] (F1)--(B1)
(F5)--(B5);
endtikzpicture
enddocument
versión 2 con macro definePrism
definePrism[options]list 1list 2
options angle (default=45) coeff (default=.5) zB (default=0) zF (default=2)
list 1 (x1,y1),(x2,y2),...,(xn,yn)
list 2 s1,s2,...,sn with sn = 0 or 1---> 0 if Bn is hidden
coordinates defined : B1,B2,...,Bn and F1,F2,...,Fn
El único problema: cómo determinar s1, s2, …, sn automáticamente. Conozco algunos algoritmos pero demasiado complicados con TeX
documentclass[]scrartcl
usepackagetikz
usetikzlibrary3d
pgfkeys
/definePrism/.cd,
angle/.code = defdpangle#1,
coeff/.code = defdpcoeff#1,
zB/.code = defzB#1,
zF/.code = defzF#1,
makeatletter
defdefinePrism[email protected][[email protected][email protected][]
def[email protected][#1]#2#3%
begingroup
pgfkeys/definePrism/.cd, angle=45,coeff=.5,zB=0,zF=2
pgfqkeys/definePrism#1
pgfmathsetmacroabszdpcoeff*sin(dpangle)
pgfmathsetmacroordzdpcoeff*cos(dpangle)
beginscope[x = (0cm,1cm),
y = (1cm,0),
z = (-ordz cm,-absz cm)]
beginscope[canvas is xy plane at z=zB]
path foreach coord [count=ni] in #2 %
coord coordinate (Bni)
;
endscope
beginscope[canvas is xy plane at z=zF]
path foreach coord [count=ni] in #2 %
coord coordinate (Fni)
;
endscope
endscope
foreach k [count=ni] in #3 %
globalletnbni
globalletlastik
draw (F1) foreach i in 2,...,nb --(Fi) -- cycle;
foreach i [count=ni,count=si from nb] in #3
ifnum ni > nb pgfmathtruncatemacroni1 fi
ifnum si > nb pgfmathtruncatemacrosi1 fi
ifnum i = 0
draw[dashed] (Bsi)--(Bni)--(Fni);
else
draw (Fni)--(Bni);
ifnum lasti=1
draw (Bsi)--(Bni);
else
draw[dashed] (Bsi)--(Bni);
fi
fi
globalletlastii
%
endgroup
begindocument
begintikzpicture[scale=1]
definePrism[angle=30,zF=8](0,0),(4,1),(3,4),(2,3),(0,2)0,1,1,1,1
endtikzpicture
begintikzpicture[scale=1]
definePrism[angle=30](0,0),(0,2),(2,2),(2,0)0,1,1,1
endtikzpicture
enddocument
base
contiene la lista de coordenadas del polígono x / y y axe
define el vector de dirección “xyz” del prisma, que es por defecto axe=0 0 1
documentclassarticle
usepackagepst-solides3d
begindocument
pssetunit=0.5,lightsrc=10 5 50,viewpoint=50 20 30 rtp2xyz,Decran=50
beginpspicture*(-6,-4)(6,9)
psframe(-6,-4)(6,9)
psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!30]
psSolid[object=prisme,h=6,fillcolor=blue!10,
base=0 1 -1 0 0 -2 1 -1 0 0]
axesIIID(4,4,6)(4.5,4.5,8)
endpspicture*
%
beginpspicture*(-6,-4)(6,9)
psframe(-6,-4)(6,9)
psSolid[object=grille,base=-4 4 -4 4,fillcolor=red!30]
psSolid[object=prisme,fillcolor=blue!10,
axe=0 1 2,h=8,base=0 -2 1 -1 0 0 0 1 -1 0]
psPoint(0,4.2,8.4)V
psline[linecolor=blue,arrowscale=2]->(0,0)(V)
axesIIID(4,4,4)(4.5,4.5,8)
endpspicture*
enddocument
Cajas simples con pst-3dplot
documentclassarticle
usepackagepst-3dplot
begindocument
pssetcoorType=1,Alpha=135
beginpspicture(-1,-2)(5,2.25)
%pstThreeDCoor[xMin=-1,xMax=4,yMin=-1,yMax=4,zMin=-1,zMax=4]
pstThreeDBox[hiddenLine=false](0,0,0)(0,0,3)(3,0,0)(0,3,0)
endpspicture
%
pssetcoorType=2
beginpspicture(-3,-2)(2,2.25)
%pstThreeDCoor[xMin=-1,xMax=4,yMin=-1,yMax=4,zMin=-1,zMax=4]
pstThreeDBox[hiddenLine](0,0,0)(0,0,3)(3,0,0)(0,3,0)
endpspicture
enddocument
documentclassarticle
usepackagepst-3dplot
begindocument
pssetcoorType=2
beginpspicture(-2,-2.25)(2,5)
pstThreeDCoor[xMin=-2,xMax=2,yMin=-2,yMax=5,zMin=-2,zMax=6]
pstThreeDLine(0,0,0)(0,3,0)(-2,0,0)(0,-3,0)(1,-3,0)(0,0,0)
pstThreeDLine(1,2,5)(1,5,5)(-1,2,5)(1,-1,5)(2,-1,5)(1,2,5)
pstThreeDLine(0,0,0)(1,2,5)
pstThreeDLine(0,3,0)(1,5,5)
pstThreeDLine[linestyle=dashed](-2,0,0)(-1,2,5)
pstThreeDLine[linestyle=dashed](0,-3,0)(1,-1,5)
pstThreeDLine(1,-3,0)(2,-1,5)
endpspicture
enddocument
y una solución automática que necesita lo último pst-3dplot.tex
de http://texnik.dante.de/tex/generic/pst-3dplot/. La macro psThreeDPrism
Me trasladaré más tarde a CTAN y también muy después me daré cuenta de las líneas ocultas. move=x y
es el vector de traslación para el polígono superior
documentclassarticle
usepackagepst-3dplot
begindocument
pssetcoorType=2
beginpspicture(-3,-2)(2,5)
pstThreeDCoor[xMin=-2,xMax=2,yMin=-2,yMax=5,zMin=-2,zMax=7]
pstThreeDPrism[height=6,move=1 2](0,0,0)(0.5,3,0)(-2,0,0)(0,-3,0)(1,-3,0)(0,0,0)
endpspicture
enddocument
Reseñas y calificaciones del artículo
No se te olvide dar difusión a este post si te valió la pena.