Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

How would I draw the following cone using TikZ? I have no clue how to incorporate the "cut-off".

I want to draw a picture of the cone given by the points (y, t) for y in R^d and t in (0, infty) such that |y - x| < t < min(1, |x|^{-1}). For several different x. Of course, to make a picture we would need d = 2.

Edit: Following Peter Grill's idea I have the following:

\documentclass{article}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  axis lines=center,
  axis on top,
  xlabel={$x$}, ylabel={$y$}, zlabel={$t$},
  domain=0:1,
  y domain=0:2*pi,
  xmin=-1.5, xmax=1.5,
  ymin=-1.5, ymax=1.5, zmin=0.0,
  samples=30]
  \addplot3 [surf, color=gray, shader=flat] ({x*cos(deg(y))},{x*sin(deg(y))},{x});
\end{axis}
\end{tikzpicture}
\end{document}

This yields the following:

Cone

First of all, the labels are way off (and I don't see how I can move them) and I would like to have a different kind of gray for the "inside" of the cone. How do I do this?

share|improve this question
    
Not sure if I understand correctly: For a given point x∈ℝ² you want to draw the 3-dimensional set {(y,t} ∈ ℝ²×ℝ : |y - x| < t < min(1, 1/|x|)} ? –  Caramdir Sep 18 '11 at 18:09
    
@Caramdir: Yes, exactly. –  Jonas Teuwen Sep 18 '11 at 19:19

3 Answers 3

up vote 9 down vote accepted

It you want a TiKZ solution, you can adapt the solution from How to draw a circular cone.

\documentclass{article}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xlabel={$x$}, ylabel={$y$}, zlabel={$z$},
    domain=2:5,
    y domain=0:2*pi,
    xmin=-10, xmax=10,
    ymin=-10, ymax=10,  zmin=0.0,
    samples=20]
\addplot3 [surf,z buffer=sort] ({x*cos(deg(y))},{x*sin(deg(y))},{x});
\end{axis}
\end{tikzpicture}
\end{document}

enter image description here

share|improve this answer

Taking up your EDIT (which has been removed while I wrote this, so the answer may be outdated) and the answer of Peter Grill, I come to the following conclusions:

  1. pgfplots only supports one color per patch segment. The best it provides is to support a color map (for example colormap/blackwhite).

  2. The label placement is a bug in the default label styles - apparently, it tries to place them for the default axis lines=box. A work-around is presented below. I add that to the pgfplots bug list.

Here is the suggested modification:

enter image description here

\documentclass{article}
\usepackage{pgfplots}

\pgfplotsset{compat=1.3}

\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
\begin{axis}[
  axis lines=center,
  axis on top,
  xlabel={$x$}, ylabel={$y$}, zlabel={$t$},
  domain=0:1,
  y domain=0:2*pi,
  xmin=-1.5, xmax=1.5,
  ymin=-1.5, ymax=1.5, zmin=0.0,
        every axis x label/.style={at={(rel axis cs:0,0.5,0)},anchor=south},
        every axis y label/.style={at={(rel axis cs:0.5,0,0)},anchor=north},
        every axis z label/.style={at={(rel axis cs:0.5,0.5,0.9)},anchor=west},
  samples=30]
  \addplot3 [surf, colormap/blackwhite, shader=flat] ({x*cos(deg(y))},{x*sin(deg(y))},{x});

\end{axis}
\end{tikzpicture}
\end{document}

The key at={(rel axis cs:<x>,<y>,<z>)} denotes a location in "relative limits" where 0 means "lower limit" and "1" means "upper limit". The placement is thus adopted to your specific example: "0.5" is the middle of an axis due to the symmetry in your example. The label placement can be adjusted using xshift or yshift.

EDIT: After fixing bugs in the back-end of pgfplots, I took the chance to implement something with fancy colors. Now, the development version of pgfplots supports a different colormap for the "other side" of the patch: enter image description here

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
\begin{axis}[
  axis lines=center,
  axis on top,
  xlabel={$x$}, ylabel={$y$}, zlabel={$t$},
  domain=0:1,
  y domain=0:2*pi,
  xmin=-1.5, xmax=1.5,
  ymin=-1.5, ymax=1.5, zmin=0.0,
        every axis x label/.style={at={(rel axis cs:0,0.5,0)},anchor=south},
        every axis y label/.style={at={(rel axis cs:0.5,0,0)},anchor=north},
        every axis z label/.style={at={(rel axis cs:0.5,0.5,0.9)},anchor=west},
        mesh/interior colormap name=hot,
        colormap/blackwhite, 
        samples=10,
        samples y=40,
     z buffer=sort,
 ]
  \addplot3 [surf, shader=faceted] ({x*cos(deg(y))},{x*sin(deg(y))},{x});
\end{axis}
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[
    hide axis,
    xlabel=$x$,ylabel=$y$,
    mesh/interior colormap name=hot,
    colormap/blackwhite, 
 ]
  \addplot3 [domain=-1.5:1.5,surf, shader=faceted] {-exp(-x^2-y^2)};
\end{axis}
\end{tikzpicture}
\end{document}

This might eventually become interesting once the version is stable.

share|improve this answer
    
Thanks. I have done a rollback. This is certainly useful, but now I have just done two \addplot3, one for the outer side and one for the inner side of the cone. The rest of your code is very useful. –  Jonas Teuwen Sep 25 '11 at 17:43
1  
Wow, very nice! –  Jake Oct 4 '11 at 21:05

run it with xelatex

\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}

\begin{pspicture}(-3,-3)(3,5)
 \psset{viewpoint=65 0 20 rtp2xyz,Decran=60,lightsrc=viewpoint}
 \psSolid[object=grille,base=-5 5 -5 5]
 \psSolid[object=troncconecreux,h=6,r0=4,r1=2,ngrid=20 20]
 \axesIIID(0,0,6)(6,6,8)
\end{pspicture}

\end{document}

enter image description here

share|improve this answer
    
Thanks. Can it be done with TikZ as well? I'd also like to see a plane and a vertical time axis. –  Jonas Teuwen Sep 18 '11 at 13:32
    
Thanks! Why do I need xelatex? –  Jonas Teuwen Sep 18 '11 at 16:00
    
it uses PostScript code which cannot be handled by pdflatex –  Herbert Sep 18 '11 at 16:34
2  
It also works with latex and dvips/ps2pdf. –  Stefan Kottwitz Sep 19 '11 at 20:17

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.