我想要绘制下图:
我修改了这个问题答案的代码帮忙画一个梯形
\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}
有几件事需要改进。
- 标签 $b$ 怎样才能定位在中间?
- 平行四边形怎么会位于图片的中心?在我看来,它移到了顶部。
答案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 corner
trapezium
这是我的代码:
\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));