与径向平行的矩形

与径向平行的矩形

我想画一个与径向平行的矩形,我做到了,但我想知道是否有更优雅的方式去做吧。

这是我的 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}

在此处输入图片描述

相关内容