我想画一个与径向平行的矩形,我做到了,但我想知道是否有更优雅的方式去做吧。
这是我的 MWE:
\documentclass[border = 0.5cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc, arrows, shapes, decorations.pathmorphing, arrows.meta}
\begin{document}
\begin{tikzpicture}
\draw[help lines,step=1.0,green] (-10,-7) grid (7,7); % help grid
\coordinate (A) at (210:6cm);
\draw[fill=black!50!white] (210:6cm) -- ($(A) +(120:1cm)$) -- ($(A)+(120:1cm)+(210:3cm)$) -- ($(A)+(120:1cm)+(210:3cm)+(300:2cm)$) -- ($(A)+(120:1cm)+(210:3cm)+(300:2cm)+(30:3cm)$) -- ($(A)+(120:1cm)+(210:3cm)+(300:2cm)+(30:3cm)+(120:1cm)$) -- cycle;
\draw[cyan] (0:0) -- (210:11cm); % help radial axe
\end{tikzpicture}
\end{document}
答案1
您使用六个线段来绘制一个矩形,因此显然至少可以通过仅使用角来缩短它。另一种使代码更短的方法是使用相对坐标,即++
在坐标前添加。
\documentclass[border = 0.5cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc, arrows, shapes, decorations.pathmorphing, arrows.meta}
\begin{document}
\begin{tikzpicture}
\draw[help lines,step=1.0,green] (-10,-7) grid (7,7); % help grid
\coordinate (A) at (210:6cm);
\draw[fill=black!50!white] ($(A) +(120:1cm)$) -- ++(210:3cm) -- ++(300:2cm) -- ++(30:3cm) -- cycle;
\draw[cyan] (0:0) -- (210:11cm); % help radial axe
\end{tikzpicture}
\end{document}
另一个可能的改进是使所有绘图角度都相对于预定义的角度。下面我使用declare function={a=210;}
创建一个新常量,然后a+90
在极坐标中使用相对坐标:
\documentclass[border = 0.5cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
declare function={a=210;}
]
\draw[help lines,step=1.0,green] (-10,-7) grid (7,7); % help grid
\coordinate (A) at (210:6cm);
\draw[fill=black!50!white] ($(A) +(a-90:1cm)$) -- ++(a:3cm) -- ++(a+90:2cm) -- ++(a+180:3cm) -- cycle;
\draw[cyan] (0:0) -- (210:11cm); % help radial axe
\end{tikzpicture}
\end{document}
答案2
是的。您可以直接旋转矩形。在此示例中,around
必要,因为您围绕原点旋转,但一般情况下是必要的。因此,您只需输入
\draw[fill=black!50!white,rotate around={210:(0,0)}] (6,-1) rectangle (9,1);
或者在这个例子中
\draw[fill=black!50!white,rotate=210] (6,-1) rectangle (9,1);
获得
\documentclass[border = 0.5cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc, arrows, shapes, decorations.pathmorphing, arrows.meta}
\begin{document}
\begin{tikzpicture}
\draw[help lines,step=1.0,green] (-10,-7) grid (7,7); % help grid
\coordinate (A) at (210:6cm);
%\draw[fill=black!50!white] (210:6cm) -- ($(A) +(120:1cm)$) -- ($(A)+(120:1cm)+(210:3cm)$) -- ($(A)+(120:1cm)+(210:3cm)+(300:2cm)$) -- ($(A)+(120:1cm)+(210:3cm)+(300:2cm)+(30:3cm)$) -- ($(A)+(120:1cm)+(210:3cm)+(300:2cm)+(30:3cm)+(120:1cm)$) -- cycle;
\draw[fill=black!50!white,rotate around={210:(0,0)}] (6,-1) rectangle (9,1);
\draw[cyan] (0:0) -- (210:11cm); % help radial axe
\end{tikzpicture}
\end{document}
答案3
另一个解决方案可能是node
路径末尾和sloped
。
此选项sloped
强制节点与路径相切。如果您绘制的路径(0:0) -- (210:6cm)
终止于您想要节点的位置,选项at end
(或pos=1
)和正确的锚点将确保其位置。并且allow upside down
选项不会改变节点方向以使其内容保持上下颠倒,这样west
(或east
)锚点始终可以用作参考。
\documentclass[border = 0.5cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc, arrows, shapes, decorations.pathmorphing, arrows.meta}
\begin{document}
\begin{tikzpicture}[
mynode/.style={rectangle,
minimum width=3cm,
minimum height=2cm,
draw=black,
fill=black!50,
sloped,
allow upside down,
anchor=west}]
\draw[help lines,step=1.0,green] (-10,-7) grid (7,7); % help grid
\foreach \i in {0,30,...,330}
\draw[cyan] (0:0) -- (\i:6cm) node[mynode, at end]{}; % help radial axe
\end{tikzpicture}
\end{document}