我有以下代码:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{math,arrows.meta}
\begin{document}
\tikzmath{\radiusarrow = 3;
\radiusmax = 4;}
\centering
\begin{tikzpicture}[>=stealth]
\draw (0,0) circle (\radiusmax) ;
\foreach \ang/\lab/\dir in {
0/right,
15/right,
30/{above right},
45/{above right},
60/{above right},
75/above,
90/above,
105/above,
120/{above},
135/{above left},
150/left,
165/left,
180/left,
195/{below left},
210/below,
225/below,
240/below,
255/{below},
270/{below},
285/right,
300/right,
315/right,
330/right,
345/right} {
\draw [dashed,lightgray] (0,0) -- (\ang:\radiusmax) ;
\node at (\ang:\radiusmax) [\dir] {\ang$^\circ$}; % label
}
\draw[-{Latex[length=3cm, width=13]},red] (255:\radiusarrow) -- (0,0) ;
\draw[-{Latex[length=3cm, width=13]},red] (315:\radiusarrow) -- (0,0) ;
\end{tikzpicture}
\end{document}
此代码绘制一个圆并用极角标记它。它还从圆的边缘到中心绘制了一些箭头(三角形)。此代码中有几件事我没有成功实现:
我没能成功地以“美观”的方式放置角度标签,即与圆边缘保持相同的距离。
如您所见,我已定义参数(\radiusmax 为圆半径,\radiusarrow 为箭头长度),以便轻松更改圆和箭头的大小。但是,此尝试尚未完成,因为我仍需使用以下行中的选项 length=3cm 固定箭头长度(3cm):
\draw[-{Latex[length=3cm, width=13]},red] (255:\radiusarrow) -- (0,0) ;
我曾尝试写:
\draw[-{Latex[length=\radiusarrow, width=13]},red] (255:\radiusarrow) -- (0,0) ;
以便箭头长度仅在代码开头固定。但这不起作用。
- 您是否注意到箭头没有完全到达中心?
您知道如何解决这些问题吗?
答案1
你可能喜欢 :-):
编辑:使用Latex
箭头,它们不会在圆心处互相接触。用以下方法替换它,可以Triangle
得到您想要的结果:
\documentclass[tikz, margin=3.14159 mm]{standalone}
\usepackage{lmodern}
\usetikzlibrary{arrows.meta}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}[
arr/.style = {-{Triangle[length=\radiusarrow cm, width=25]}, red}
]
\def\radiusarrow{3};
\def\radiusmax {4}
%%%
\draw (0,0) circle[radius=\radiusmax];
%
\foreach \i in {0,15,...,345}
{
\draw[densely dashed, gray] (\i:\radiusmax)
coordinate[label={[text=black, anchor=\i+180]\i:\SI{\i}{\degree}}] (c\i)
-- (0,0);
}
\draw[arr] (255:\radiusarrow) -- (0,0) ;
\draw[arr] (315:\radiusarrow) -- (0,0) ;
\end{tikzpicture}
\end{document}
如您所见,节点使用的是带标签的坐标,锚点是anchor=\i+180
,\i
是标签位置的角度。用于标记角度的siunitx
包是:\SI{...}{\degree}
。
以及圆心的放大倍数:
答案2
另一种可能性是设置anchor=\ang+180
并使用circle
节点。对于长度,您可以乘以 1cm,即length=\radiusarrow*1cm
。尚不确定 #3。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{math,arrows.meta}
\begin{document}
\tikzmath{\radiusarrow = 3;
\radiusmax = 4;}
\centering
\begin{tikzpicture}[>=stealth]
\draw (0,0) circle (\radiusmax) ;
\foreach \ang in {0,15,...,345} {
\draw [dashed,lightgray] (0,0) -- (\ang:\radiusmax) ;
\node[circle, inner sep=1pt, anchor=\ang+180] at (\ang:\radiusmax) {\ang$^\circ$}; % label
}
\draw[-{Latex[length=\radiusarrow*1cm, width=13]},red] (255:\radiusarrow) -- (0,0) ;
\draw[-{Latex[length=\radiusarrow*1cm, width=13]},red] (315:\radiusarrow) -- (0,0) ;
\end{tikzpicture}
\end{document}
答案3
删除角度标签的节点锚定 ( [\dir]
)。对于箭头,我增加了宽度值,例如:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{math,arrows.meta}
\begin{document}
\tikzmath{\radiusarrow = 3;
\radiusmax = 4;}
\centering
\begin{tikzpicture}[>=stealth]
\draw (0,0) circle (\radiusmax) ;
\foreach \ang/\dir in {
0/right,
15/right,
30/{above right},
45/{above right},
60/{above right},
75/above,
90/above,
105/above,
120/{above},
135/{above left},
150/left,
165/left,
180/left,
195/{below left},
210/below,
225/below,
240/below,
255/{below},
270/{below},
285/right,
300/right,
315/right,
330/right,
345/right} {
\draw [dashed,lightgray] (0,0) -- (\ang:\radiusmax) ;
\node at (\ang:\radiusmax+0.35){\ang$^\circ$}; % label
}
\draw[-{Latex[length=3cm, width=25]},red] (255:\radiusarrow) -- (0,0) ;
\draw[-{Latex[length=3cm, width=25]},red] (315:\radiusarrow) -- (0,0) ;
\end{tikzpicture}
\end{document}