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.

Can we specify direction in spherical coordinates?

I know we can do polar (angle:radius) but what is we are using tikz-3d and want to specify (r, theta, phi) where theta is the azimuthal angle?

share|improve this question
    
Does it need to be implicit (this will be harder as one would delve into TikZ handler/parsing algorithm) or would a custom coordinate system work for you? Does “tikz-3d” refer to the tikz-3dplot package which provides something like this? –  Qrrbrbirlbel May 14 '13 at 2:05
    
@Qrrbrbirlbel I didn't know the exact package name but I have it standard in my preamble. What do you mean by custom coordinate system? Would it be portable or would it have to be recreated every time? –  dustin May 14 '13 at 2:13
    
Look it up. Maybe you mean the TikZ library 3d? And this library already provides a xyz spherical coordinate system. –  Qrrbrbirlbel May 14 '13 at 2:19
    
@Qrrbrbirlbel in the manual it says on ch 5 that spherical polar coordinates is on the todo list. –  dustin May 14 '13 at 2:25
    
What version of PGF/TikZ are you using (\pgfversion or the first page of the manual)? The manual of the current stable release version 2.10 takes about chains in chapter 5. Granted, the current manual doesn’t tell about xyz spherical either. –  Qrrbrbirlbel May 14 '13 at 2:28

1 Answer 1

up vote 5 down vote accepted

TikZ provides with the apparently undocumented library 3d a xyz spherical coordinate system.

It accepts the keys radius (now fixed), angle = longitude, latitude and with my help rho and theta.

The first TikZ picture shows my example, the second a PGF picture example of the TikZ/PGF manual.

(I removed the 3d library again and implemented the xyz spherical similar to how it is done in tikzlibrary3d.code.tex. It simply uses the \pgfpointspherical macro, which does all the calculations and uses the appropriate vectors.)

Code

\documentclass[tikz,convert=false]{standalone}
%\usetikzlibrary{3d}
\makeatletter
\pgfqkeys{/tikz/cs}{
  latitude/.store in=\tikz@cs@latitude,% not needed with '3d' library
  longitude/.style={angle={#1}},% not needed with '3d' library
  theta/.style={latitude={#1}},
  rho/.style={angle={#1}}
}
\tikzdeclarecoordinatesystem{xyz spherical}{% needed even with '3d' library!
  \pgfqkeys{/tikz/cs}{angle=0,radius=0,latitude=0,#1}%
  \pgfpointspherical{\tikz@cs@angle}{\tikz@cs@latitude}{\tikz@cs@xradius}% fix \tikz@cs@radius to \tikz@cs@xradius
}
\makeatother

\tikzset{my color/.code=\pgfmathparse{(#1+90)/180*100}\pgfkeysalso{every path/.style={color=red!\pgfmathresult!blue}}}
\begin{document}
\begin{tikzpicture}[radius=+0.4pt]% (this is the radius of little dots on the lines)
\foreach \lat in {-90,-80,...,90} {
 \tikzset{my color=\lat}
 \foreach \lon in {0,10,...,359} {
  \filldraw (xyz spherical cs: radius=1, angle=\lon,    latitude=\lat) circle[]
         -- (xyz spherical cs: radius=1, angle=\lon+10, latitude=\lat);
 }}
\end{tikzpicture}

\begin{tikzpicture}
\foreach \lat in {-90,-75,...,30}
  \filldraw[line join=round, fill=lightgray]
    \foreach \lon in {0,20,...,359} {
         (xyz spherical cs: radius=1, rho=\lon,    theta=\lat   )
      -- (xyz spherical cs: radius=1, rho=\lon+20, theta=\lat   )
      -- (xyz spherical cs: radius=1, rho=\lon+20, theta=\lat+15)
      -- (xyz spherical cs: radius=1, rho=\lon,    theta=\lat+15)
      -- cycle
    };
\end{tikzpicture}
\end{document}

Output

enter image description here

enter image description here

share|improve this answer

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.