5

I have a figure, that I want to obtain by rotating an element. I can get either

enter image description here
(source: funkyimg.com)

by the following code :

\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{esvect}
\usepackage[usenames,svgnames]{xcolor}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\draw (0,0) circle (1cm) node{HP};

\foreach \angle in {0,30,60,90,120,150,180,210,240,270,300,330} {\begin{scope}[rotate=\angle]
\draw[->] (0,1) .. controls +(0,1) and +(-1,-0.5) .. (1.5,3);
\draw[->, Aquamarine!50!black] (0,1)--(0,2.5)node[above,Aquamarine!50!black]{$\vv{v}$};
\draw[->, Orchid!50!black] (0,1.5)--(0.6,1.5)node[pos=0.5, above,Orchid!50!black]{$\vv{f_{ic}}$};
\end{scope} }
\end{tikzpicture}
\end{document}

Or that :

enter image description here
(source: funkyimg.com)

with adding the rotate command in my node :

\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{esvect}
\usepackage[usenames,svgnames]{xcolor}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
\draw (0,0) circle (1cm) node{HP};

\foreach \angle in {0,30,60,90,120,150,180,210,240,270,300,330} {\begin{scope}[rotate=\angle]
\draw[->] (0,1) .. controls +(0,1) and +(-1,-0.5) .. (1.5,3);
\draw[->, Aquamarine!50!black] (0,1)--(0,2.5)node[above,Aquamarine!50!black,rotate=\angle]{$\vv{v}$};
\draw[->, Orchid!50!black] (0,1.5)--(0.6,1.5)node[pos=0.5, above,Orchid!50!black, rotate=\angle]{$\vv{f_{ic}}$};
\end{scope} }
\end{tikzpicture}
\end{document}

I would like a mix of the two, with the nodes position rotated as in my second example, but the text inside it still horizontal as in my first. Is there a way to do that ?

What I would like (in a simplified setting), the desired result would be in red :

enter image description here
(source: funkyimg.com)

1

1 Answer 1

3

EDIT

I think that you may be better off using polar coordinates. I am crap at using controls so the curves are not what you want but this shows the idea:

enter image description here

Here is the code:

\documentclass[a4paper]{article}
\usepackage[usenames,svgnames]{xcolor}
\usepackage{amsmath}
\usepackage{esvect}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
  \draw (0,0) circle (1cm) node{HP};
  \foreach \angle in {0,30,...,330} {
    \draw[->] (\angle:1) .. controls (\angle:2.2) and (\angle-20:2.7) ..  (\angle-30:3);
    \draw[->, Aquamarine!50!black] (\angle:1)--(\angle:2.5);
    \node at (\angle:2.65) [Aquamarine!50!black]{$\vv{v}$};
    \draw[->, Orchid!50!black] (\angle:1.5)--(\angle-20:1.5);
    \node at (\angle-22:1.8)[Orchid!50!black]{$\scriptstyle\vv{f_{ic}}$};
   }
\end{tikzpicture}

\end{document}

In particular, the labels are places using polar coordinates at the "correct" places. Notice that tikz is really clever and lets you do things like (\angle-20:1) to change the angle in the polar coordinate. The other small improvement on your code is that the \foreach loop can interpolate all of the the angles from {0,30,...,330} so you don't nee to type them all out.

--original post--

Putting the rotate inside the \draw command rather than indei \node seems to do the trick:

enter image description here

Here's your modified MWE:

\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{esvect}
\usepackage[usenames,svgnames]{xcolor}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
  \draw (0,0) circle (1cm) node{HP};
  \foreach \angle in {0,30,60,90,120,150,180,210,240,270,300,330} {\begin{scope}[rotate=\angle]
    \draw[->] (0,1) .. controls +(0,1) and +(-1,-0.5) .. (1.5,3);
    \draw[->,rotate=\angle, Aquamarine!50!black] (0,1)--(0,2.5)node[above,Aquamarine!50!black]{$\vv{v}$};
    \draw[->, rotate=\angle, Orchid!50!black] (0,1.5)--(0.6,1.5)node[pos=0.5, above,Orchid!50!black]{$\vv{f_{ic}}$};
  \end{scope} }
\end{tikzpicture}

\end{document}
4
  • I am not sure how to correctly express what I would like. My 'ok' part would be the one withangle=0. But for instance for my angle=180 part, I would like my $v$ text to be under the arrow. I added a paint drawing to try to be more clear. In your instance, the nodes are not where I would like them to be, but the text rotation is fine. Nov 15, 2016 at 10:10
  • @Aerandal I've added a second approach using polar coordinates. If I understand what you want it solves your problem in principle but the curves are wrong, which might be a problem.
    – user30471
    Nov 15, 2016 at 11:08
  • 1
    I used \draw[->, Orchid!50!black] (\angle:1.5)--([turn]270:0.6cm); to assure the orthogonality of my two arrows, but otherwise I managed to do what I wanted by tweaking a bit the values. The price of your solution is indeed that it is a bit more complex for the curves, but still manageable. Thx. Nov 15, 2016 at 13:19
  • @Aerandal I didn't know about turn. Thanks!
    – user30471
    Nov 15, 2016 at 13:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .