我有一个图形,我想通过旋转元素来获得它。我可以获得
(来源:funkyimg.com)
通过以下代码:
\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}
或者那个 :
(来源:funkyimg.com)
在我的节点中添加旋转命令:
\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}
我想将两者混合使用,节点位置像我的第二个示例一样旋转,但其中的文本仍像我的第一个示例一样保持水平。有办法吗?
我想要的(在简化的设置中),期望的结果将是红色的:
(来源:funkyimg.com)
答案1
编辑
我认为使用极坐标可能更好。我不擅长使用控件,所以曲线不是你想要的,但这显示了这个想法:
以下是代码:
\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}
具体来说,标签是使用极坐标在“正确”位置放置的位置。请注意,这tikz
真的很聪明,可以让您做一些事情,比如(\angle-20:1)
改变极坐标中的角度。代码的另一个小改进是循环\foreach
可以插入所有角度,{0,30,...,330}
因此您不需要将它们全部输入出来。
--原帖--
把命令放在rotate
里面\draw
而不是 indei\node
似乎可以解决问题:
这是您修改后的 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}