使用 TikZ 改进平行四边形

使用 TikZ 改进平行四边形

我想要绘制下图:

在此处输入图片描述

我修改了这个问题答案的代码帮忙画一个梯形

\documentclass[border=5mm, multi, tikz]{standalone}
    \usetikzlibrary{shapes.geometric,angles,quotes}
    \begin{document}
    \begin{tikzpicture}[my angle/.style={font=\scriptsize, draw, angle eccentricity=1.75, angle radius=3mm}]
      \node (a) [trapezium, trapezium left angle=60, trapezium right angle=120, minimum width=3cm, minimum height=2cm, draw, thick, label=below:$b$, label=left:$a$] {};
        \draw [densely dashed] (a.north west) coordinate (a nw) -- (a nw |- a.south) node [midway,right] {$h$} coordinate (a1);
          \coordinate (a blc) at (a.bottom left corner);
           \pic [my angle, "$\alpha$"] {angle=a1--a blc--a nw};
    \end{tikzpicture}
    \end{document}

有几件事需要改进。

  1. 标签 $b$ 怎样才能定位在中间?
  2. 平行四边形怎么会位于图片的中心?在我看来,它移到了顶部。

在此处输入图片描述

答案1

Alabel=[<options>]<angle>:<text>是一个附加节点,放置在<angle>其父节点的方向上,其中标签节点的锚点由 TikZ 自动评估。

除了数字(如60)和特殊角度below(= 270)之外,左下方……它也可以只是父节点的锚点,这里bottom side指定了底边的中点。

由于 TikZ 将其解释为240(因为它位于父节点中心 240° 处)我们需要明确使用标签anchor = north

这里我使用below(隐式设置anchor=north)将标签inner ysep(默认为.3333em)放置在远离父节点的位置,然后将其设置inner ysep为零,这解决了您的另一个问题。(另一种解决方案可以使用label distance


标签inner ysep在两侧添加b以计算形状的边框(将要绘制的矩形)。此边框也有助于边界框,这就是为什么图片的底部inner ysep比顶部离墨水更远的原因。

将灰色的 ( anchor = north) 与黑色的 ( below=.3333em, inner ysep=0pt) 进行比较:
在此处输入图片描述


我添加了coordinate suffix = <suffix> at <anchor>一个标签的快捷方式,这样可以更轻松地声明节点锚点的坐标别名。

我还添加了outer sep = +0pt梯形,以便所有锚点参考都位于边框上(而不是在边框外面)。

没有:
在此处输入图片描述

和:
在此处输入图片描述

代码

\documentclass[border=5mm, multi, tikz]{standalone}
\usetikzlibrary{shapes.geometric, angles, quotes}
\tikzset{
  coordinate suffix/.style args={#1 at #2}{
    % or: append after command =
    %        coordinate (\tikzlastnode\space#1) at (\tikzlastnode.#2)
    label={[name=\tikzlastnode\space#1,coordinate]#2:}}}
\begin{document}
\begin{tikzpicture}[
  my angle/.style={
    font=\scriptsize, draw, angle eccentricity=1.75, angle radius=3mm}]
\node (a) [trapezium, trapezium left angle=60, trapezium right angle=120,
           minimum width=3cm, minimum height=2cm, draw, thick,
%           label={[anchor=north, draw, gray]bottom side:$b$},
           label={[below/.expanded=\pgfkeysvalueof{/pgf/inner ysep},
                   inner ysep=+0pt]bottom side:$b$},
           label=left:$a$,
           coordinate suffix = blc at bottom left corner,
           coordinate suffix = nw  at north west,
           outer sep=+0pt,
           ] {};
\draw [densely dashed] (a nw) -- node [right] {$h$} (a nw |- a.south)
                                                    coordinate (a1);
%\coordinate (a blc) at (a.bottom left corner);
\pic [my angle, "$\alpha$"] {angle=a1--a blc--a nw};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案2

我认为这里忽略了一些基本的东西......第一张图片的波浪线!

只是开玩笑,但只是为了好玩,我在这里发布了我的“解决方案”,通过梯形的和的相对节点,;)手动将标签放置$b$在底座中间。您只需知道与形状相关的附加节点的名称(请参阅 TikZ 手册):\path[midway,below].bottom left corner.bottom right cornertrapezium

梯形节点

这是我的代码:

\documentclass[border=5mm, multi, tikz]{standalone}
\usetikzlibrary{shapes.geometric,angles,quotes,decorations,decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}[my angle/.style={font=\scriptsize, draw, angle eccentricity=1.75, angle radius=3mm},
  squigglyline/.style={decorate,decoration={random steps,segment length=1pt,amplitude=0.15pt}}]
  \node (a) [trapezium, trapezium left angle=60, trapezium right angle=120, minimum width=3cm, minimum height=2cm, draw, thick, label=left:$a$, outer sep=+0pt,squigglyline] {};
  \draw [densely dashed,squigglyline] (a.north west) coordinate (a nw) -- (a nw |- a.south) node [midway,right] {$h$} coordinate (a1);
  \coordinate (a blc) at (a.bottom left corner);
  \pic [my angle, "$\alpha$"] {angle=a1--a blc--a nw};
  \path (a.bottom left corner) -- (a.bottom right corner) node [midway, below] {$b$}; % place $b$ manually, knowing trapezium shape's nodes's names
\end{tikzpicture}
\end{document}

结果如下(squigglyline根据您的喜好调整样式的参数):

在此处输入图片描述

答案3

我觉得这里有个滥用node(梯形)的地方。让我们尽可能简单地绘制这个简单的图形。

在此处输入图片描述

\documentclass{article}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\lipsum[7]  
\begin{center}
\begin{tikzpicture}[declare function={a=4;b=2.5;alpha=65;r=.4;}]    
\path 
(0,0) coordinate (A) +(alpha/2:.6) node[red]{$\alpha$}
(a,0) coordinate (B)
(alpha:b) coordinate (D)
($(B)+(D)-(A)$) coordinate (C)
($(A)!(D)!(B)$) coordinate (H)
;
\draw[red] (A)+(r,0) arc(0:alpha:r);
\draw[dashed] (D)--(H) node[midway,right]{$h$};
\draw[thick] (A)
--(B) node[midway,below]{$a$}
--(C)--(D)
--cycle node[midway,left]{$b$};
;
\end{tikzpicture}
\end{center}    
\lipsum[8]
\end{document}

渐近线代码:

在此处输入图片描述

// http://asymptote.ualberta.ca/
unitsize(1cm);
real a=4, b=2.5;   // 2 sides of the parallelogram 
real alpha=65;     // an angle of the parallelogram
pair A=(0,0),B=(a,0),D=b*dir(alpha);
pair C=B+D-A;
pair H=(D.x,0);
draw("$h$",align=E,D--H,gray+dashed);
draw(arc(A,.3,0,alpha),magenta);
draw(A--B--C--D--cycle,black+1pt);
label("$\alpha$",A,2.8dir(alpha/2),magenta);
label("$a$",A--B,S);
label("$b$",A--D,W);

shipout(bbox(5mm,invisible));

相关内容