Drawing Solids with LaTeX
You might be interested in asymptote, a vector graphics language that you uses TeX for labels and can be used from within LaTeX.
Asymptote can draw standard shapes (spheres, cylinders, cubes, etc) which you can then scale, rotate, and shift to create many other shapes. (Asymptote can also do many other things.)
Here's a brief example.
\documentclass{standalone}
\usepackage{asymptote}
\begin{document}
\begin{asy}
import three;
//Setup View
size(200);
currentprojection=orthographic(5,4,2);
//Draw Axes
pen thickblack = black+0.75;
real axislength = 2.0;
draw(L=Label("$x$", position=Relative(1.1), align=SW), -axislength*X--axislength*X,thickblack, Arrow3);
draw(L=Label("$y$", position=Relative(1.1), align=E), -axislength*Y--axislength*Y,thickblack, Arrow3);
draw(L=Label("$z$", position=Relative(1.1), align=N), -2*axislength*Z--2*axislength*Z,thickblack, Arrow3);
//Define cube surfaces
surface c1 = unitcube;
surface c2 = shift(-2Z)*rotate(45,X)*c1;
surface s1 = unitsphere;
surface s2 = rotate(75,Z)*shift(1.5Z)*xscale3(2)*yscale3(0.5)*zscale3(0.1)*s1;
//Draw cube surfaces
draw(c1,palegrey);
draw(c2,green);
draw(s2,red);
\end{asy}
\end{document}
One can also use
\documentclass{article}
\textwidth = 19cm
\oddsidemargin = -1.7cm
\evensidemargin = -1.4cm
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{minipage}{0.23 \textwidth}
\begin{center}
\textbf{Le cube}\vskip.3truecm
\begin{tikzpicture}[scale=0.5]
\draw[thick,black] (4,0,0) -- (0,0,0) -- (0,4,0) -- (4,4,0);
\draw[thick,black] (4,0,0) -- (4,0,-4) -- (4,4,-4) -- (4,4,0) -- cycle;
\draw[thick,black](0,4,0) -- (0,4,-4) -- (4,4,-4);
\draw[style=dashed, color=black] (4,0,-4) -- (0,0,-4)-- (0,4,-4);
\draw[style=dashed, color=black] (0,0,0) -- (0,0,-4);
\draw[<->](0,-0.3,0)--(4,-0.3,0);
\draw node[below] at (2,-0.3,0) {c};
\end{tikzpicture}
\vskip.3truecm$Volume =\dotfill $
\end{center}
\end{minipage}
\hfill
\begin{minipage}{0.23\textwidth}
\begin{center}
\textbf{Le pav\'e droit} \\
(parall\'el\'epip\`ede rectangle)\vskip.3truecm
\begin{tikzpicture}[scale=0.5]
\draw[thick,black] (6,0,0) -- (0,0,0) -- (0,3,0) -- (6,3,0);
\draw[thick,black] (6,0,0) -- (6,0,-4) -- (6,3,-4) -- (6,3,0) -- cycle;
\draw[thick,black](0,3,0) -- (0,3,-4) -- (6,3,-4);
\draw[style=dashed, color=black] (6,0,-4) -- (0,0,-4)-- (0,3,-4);
\draw[style=dashed, color=black] (0,0,0) -- (0,0,-4);
\draw[<->](-0.3,0,0)--(-0.3,3,0);
\draw node[left] at (-0.3,1.5,0) {h};
\draw[<->](0,-0.3,0)--(6,-0.3,0);
\draw node[below] at (3,-0.3,0) {L};
\draw[<->](6.3,0,0)--(6.3,0,-4);
\draw node[below right] at (6.3,0,-2) {l};
\end{tikzpicture}
\vskip.3truecm$Volume =\dotfill $
\end{center}
\end{minipage}
\hfill
\begin{minipage}{0.23 \textwidth}
\begin{center}
\textbf{Le prisme droit}\vskip.3truecm
\begin{tikzpicture}[scale=0.5]
\draw[thick,black] (0,5,0)-- (0,0,0) -- (6,0,0)--(6,5,0)--(1,5,-3)--(0,5,0)--(6,5,0);
\draw[style=dashed, color=black] (0,0,0) -- (1,0,-3)-- (1,5,-3);
\draw[style=dashed, color=black] (1,0,-3)-- (6,0,0);
\draw[thick,black] (1.5,0,-2.7) --(1.5,0.5,-2.7)--(1,0.5,-3) ;
\draw[thick,black] (0.9,0,-2.7) --(0.9,0.5,-2.7)--(1,0.5,-3) ;
\draw node[left] at (1,2.5,-3) {h};
\end{tikzpicture}
\vskip.3truecm$Volume =\dotfill $
\end{center}
\end{minipage}
\hfill
\begin{minipage}{0.23 \textwidth}
\begin{center}
\textbf{Le cylindre}\vskip.3truecm
\begin{tikzpicture}[scale=0.8]
\draw[thick,black](3,0,-2) ellipse (1.25 and 0.35);
\draw[thick,black] (1.75,-3,-2) arc (180:360:1.25 and 0.35);
\draw [dashed] (4.25,-3,-2) arc (0:180:1.25 and 0.35);
\draw[style=dashed, color=black](3,-3,-2) -- (4.25,-3,-2);
\draw[style=dashed, color=black](3,0,-2) -- (4.25,0,-2);
\draw node[above left] at (3.7,-0.1,-2) {r};
\draw node[left] at (3,-2,-2) {h};
\draw[thick,black] (1.75,0,-2) --(1.75,-3,-2);
\draw[thick,black] (4.25,0,-2) --(4.25,-3,-2);
\draw[thick,black] (3,-2.8,-2 ) --(3.2,-2.8,-2 ) --(3.2,-3,-2 );
\draw[thick,black, dashed] (3,0,-2)--(3,-3,-2 );
\end{tikzpicture}
\vskip.3truecm$Volume =\dotfill $
\end{center}
\end{minipage}
\vskip1truecm
\begin{minipage}{0.3 \textwidth}
\begin{center}
\textbf{La pyramide} \vskip.3truecm
\begin{tikzpicture}[scale=0.6]
\draw[thick,black] (0,3,0)--(6,3,0)--(6,3,-4);
\draw[style=dashed, color=black](0,3,0) -- (0,3,-4) -- (6,3,-4);
\draw[thick,black] (0,3,0) -- (3,9,-2) -- (6,3,0);
\draw[thick,black] (3,9,-2) -- (6,3,-4);
\draw[style=dashed, color=black](3,9,-2) -- (0,3,-4);
\draw[style=dashed, color=black](3,9,-2) -- (3,3,-2);
\draw[style=dashed, color=black](3,3,-2) -- (6,3,-2);
\draw[thick,black] (3,3.2,-2 ) --(3.2,3.2,-2 ) --(3.2,3,-2 );
\draw node[left] at (3,6,-2) {h};
\end{tikzpicture}
\vskip.3truecm$Volume =\dotfill $
\end{center}
\end{minipage}
\hfill
\begin{minipage}{0.3 \textwidth}
\begin{center}
\textbf{Le c\^one} \vskip.3truecm
\begin{tikzpicture}
\draw[dashed] (0,0) arc (170:10:2cm and 0.4cm)coordinate[pos=0] (a);
\draw[thick,black] (0,0) arc (-170:-10:2cm and 0.4cm)coordinate (b);
\draw[densely dashed] ([yshift=4cm]$(a)!0.5!(b)$) --node[right,font=\footnotesize] {$h$}coordinate[pos=0.95] (aa)($(a)!0.5!(b)$)-- node[above,font=\footnotesize] {$r$}coordinate[pos=0.1] (bb) (b);
\draw[thick,black] (aa) -| (bb);
\draw[thick,black] (a) -- ([yshift=4cm]$(a)!0.5!(b)$) -- (b);
\end{tikzpicture}
\vskip.3truecm$Volume =\dotfill $
\end{center}
\end{minipage}
\hfill
\begin{minipage}{0.3 \textwidth}
\begin{center}
\textbf{La sph\`ere - La boule}\vskip.3truecm
\begin{tikzpicture}
\shade[ball color = gray!40, opacity = 0.4] (0,0) circle (2cm);
\draw[thick,black](0,0) circle (2cm);
\draw[thick,black](-2,0) arc (180:360:2 and 0.6);
\draw[dashed] (2,0) arc (0:180:2 and 0.6);
\fill[fill=black] (0,0) circle (1pt);
\draw[dashed] (0,0 ) -- node[above]{$r$} (2,0);
\end{tikzpicture}
\vskip.3truecm$Volume =\dotfill $
\end{center}
\end{minipage}
\end{document}
which gives
There is pst-solides3d
. The package readme mentions:
The package is designed to draw solids in 3D perspective. Features include:
create primitive solids;
create solids by including a list of its vertices and faces;
faces of solids and surfaces can be colored by choosing from a very large palette of colors;
draw parametric surfaces in algebraic and reverse polish notation;
create explicit and parameterized algebraic functions drawn in 2 or 3 dimensions;
project text onto a plane and onto the faces of a solid;
support for including external database files.
Here's a small example (compile with LaTeX or XeLaTeX):
\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\rule[-1cm]{2cm}{2cm} \qquad\qquad
%
\psset{viewpoint=100 30 20,Decran=100,unit=1cm}
\psSolid[object=cube,a=2,
action=draw*,
fillcolor=magenta!20]
\end{document}