5

So basically I am trying to reproduce a modified version of this figure:

enter image description here

This is what I have done so far, and I would like to fill the region between u1 and u2 with the same gradient color:

enter image description here

\documentclass{article}
\usepackage{tikz}

\usepackage{tikz-3dplot}

\usepackage[active,tightpage]{preview}  
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{2mm}

\begin{document}

\tdplotsetmaincoords{60}{110}

\pgfmathsetmacro{\rvec}{.8}
\pgfmathsetmacro{\thetavec}{30}
\pgfmathsetmacro{\phivec}{60}

\begin{tikzpicture}[scale=5,tdplot_main_coords]

\coordinate (O1) at (0,0,0);

\tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}

\draw[] (O1) -- (1,0,0) node[anchor=north east]{$x_1$};
\draw[] (O1) -- (0,1,0) node[anchor=north west]{$x_2$};
\draw[] (O1) -- (0,0,1) node[anchor=south]{$x_3$};

\draw[thick,-stealth] (O1) -- (.25,0,0) node[anchor=north west]{$\mathbf{e}_1$};
\draw[thick,-stealth] (O1) -- (0,.25,0) node[anchor=north west]{$\mathbf{e}_2$};
\draw[thick,-stealth] (O1) -- (0,0,.25) node[anchor=north east]{$\mathbf{e}_3$};

\coordinate (O2) at (0,0.5,0.5);

\draw[thick,-stealth,color=black] (O1) -- (O2);

\draw[thick,-stealth] (O2) -- (0,0.85,0.25) node[anchor=south west]{$\mathbf{g}_1$};
\draw[thick,-stealth] (O2) -- (0,.75,0.75) node[anchor=west]{$\mathbf{g}_2$};
\draw[thick,-stealth] (O2) -- (0,0.35,0.75) node[anchor= west,pos=0.9]{$\mathbf{g}_3$};

\draw [draw=black, >=latex, thick] (O2) to [bend left=8] coordinate [pos=7/8] (q2n) (0,0.9,0.1) coordinate (q2) node [right] {$u_1$ curve};
\draw [draw=black, >=latex, thick] (O2) to [bend left=8] coordinate [pos=7/8] (q3n) (0,1,0.8) coordinate (q3) node [right] {$u_2$ curve};
\draw [draw=black, >=latex, thick] (O2) to [bend right=8] coordinate [pos=7/8] (q1n) (0,0.2,0.8) coordinate (q1) node [anchor=south] {$u_3$ curve};

\end{tikzpicture}

\end{document}
  • 5
    How about something like \shade [left color=gray!50, right color=white] (O2) to [bend left=8] (q3) to [bend left=8] (q2) to [bend right=8] (O2); ? – Mark Wibrow Feb 7 '16 at 18:59
  • @mark an answer? :) – cmhughes Feb 7 '16 at 19:57
4

A shading will do it. Here a custom horizontal shading is used to (try to) avoid sharp lines at the edge of the of shaded region. How successful this is may be viewer dependent. Also, the shading is put on a background layer so it doesn't cover the lines:

\documentclass[tikz,border=5]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{backgrounds}
\begin{document}
\tdplotsetmaincoords{60}{110}

\pgfmathsetmacro{\rvec}{.8}
\pgfmathsetmacro{\thetavec}{30}
\pgfmathsetmacro{\phivec}{60}

\pgfdeclarehorizontalshading{fade out}{100bp}{
color(0bp)=(gray);color(60bp)=(white);
color(90bp)=(white);color(100bp)=(white)}
\begin{tikzpicture}[scale=5, tdplot_main_coords, line cap=round]

\coordinate (O1) at (0,0,0);

\tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}

\draw (O1) -- (1,0,0) node [below left]  {$x_1$};
\draw (O1) -- (0,1,0) node [below right] {$x_2$};
\draw (O1) -- (0,0,1) node [above]       {$x_3$};

\draw [thick, -stealth] (O1) -- (.25,0,0) node [below right] {$\mathbf{e}_1$};
\draw [thick, -stealth] (O1) -- (0,.25,0) node [below right] {$\mathbf{e}_2$};
\draw [thick, -stealth] (O1) -- (0,0,.25) node [below left]  {$\mathbf{e}_3$};

\coordinate (O2) at (0,0.5,0.5);

\draw [thick, -stealth] (O1) -- (O2);

\draw [thick, -stealth] (O2) -- (0,0.85,0.25) 
  node [above right] {$\mathbf{g}_1$};
\draw [thick, -stealth] (O2) -- (0,0.75,0.75) 
  node [right] {$\mathbf{g}_2$};
\draw [thick, -stealth] (O2) -- (0,0.35,0.75) 
  node [right, pos=0.9] {$\mathbf{g}_3$};

\draw [draw=black, >=latex, thick] (O2) to [bend left=8]  
  coordinate [pos=7/8] (q2n) (0,0.9,0.1) 
  coordinate (q2) node [right] {$u_1$ curve};
\draw [draw=black, >=latex, thick] (O2) to [bend left=8]  
  coordinate [pos=7/8] (q3n) (0,1,0.8) 
  coordinate (q3) node [right] {$u_2$ curve};
\draw [draw=black, >=latex, thick] (O2) to [bend right=8] 
  coordinate [pos=7/8] (q1n) (0,0.2,0.8) 
  coordinate (q1) node [anchor=south] {$u_3$ curve};

\begin{pgfonlayer}{background}
\shade [shading=fade out, shading angle=-15] 
  (O2) to [bend left=8] (q3) to [bend left=8] (q2) to [bend right=8] (O2);
\end{pgfonlayer}
\end{tikzpicture}
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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