我刚刚开始研究 tikz,并尝试创建下面的简单图像。我尝试了一下,但没能成功。
ABCD是正方形,E是DC的中点,F是BC的中点
当然,标签应该小一点,更接近实际图形。我只是想学习 tikz,所以一些如何创建漂亮图像的示例确实会对我有所帮助。这是我的尝试。仅使用简单的 tikzpackage。
我在创建此图像时主要遇到了两个问题
1)如何在 tex 中放置点,并将文本锚定到它们?
2)如何创建角度......我知道它是一些弧线,但是是的
\begin{figure}[h!] \centering
\begin{tikzpicture}[scale=3]
\coordinate [label=left:\textcolor{blue}{$A$}] (A) at (0.,0);
\coordinate [label=right:\textcolor{blue}{$B$}] (B) at (1,0);
\coordinate [label=right:\textcolor{blue}{$C$}] (C) at (1,1);
\coordinate [label=left:\textcolor{blue}{$D$}] (D) at (0,1);
\draw (0,0) -- (1,0);
\draw (0,0) -- (0,1);
\draw (1,0) -- (1,1);
\draw (0,1) -- (1,1);
\draw (0,0) -- (1,0.5);
\draw (0,0) -- (0.5,1);
\end{tikzpicture}
\end{figure}
我还猜测有一些简单的方法可以做到这一点,比如内置的方形命令或类似的东西......
答案1
下面是使用的解决方案tkz-euclide
(正如 Regis da Silva 在我现在才看到的评论中提到的)。
编辑:我稍作修改。在这里,您只需更改点 的位置即可更改正方形的大小B
。我没有使用tkzDrawPolygon
它来绘制三角形的原因是角会稍微延伸到矩形之外。取消注释该行以了解我的意思。此外,如果 的位置B
是(1,0)
显示角度的圆弧,则您需要取消注释该行size=0.4
。
\documentclass{article}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){A} \tkzLabelPoint[below left](A){A}
\tkzDefPoint(3,0){B} \tkzLabelPoint[below right](B){B}
\tkzDefSquare(A,B) \tkzGetPoints{C}{D}
\tkzDrawSquare(A,B)
\tkzLabelPoint[above right](C){C} \tkzLabelPoint[above left](D){D}
\tkzDefMidPoint(C,D) \tkzGetPoint{E} \tkzLabelPoint[above](E){E}
\tkzDefMidPoint(B,C) \tkzGetPoint{F} \tkzLabelPoint[right](F){F}
\tkzDrawSegments(A,E E,F A,F)
%\tkzDrawPolygon(A,E,F)
\tkzDrawPoints[fill=black](E,F)
\tkzMarkAngle[fill=red,%
%size=0.4, % for small squares you may want to use this
opacity=0.4](F,A,E)
\tkzLabelAngle[pos=1.2](E,A,F){$\alpha$}
\end{tikzpicture}
\end{document}
据我所知,这个包的问题是手册只有法语。
您可以将其与普通的 TikZ 代码混合,因此可以稍微修改 wh1t3 的代码,用来tkz-euclide
绘制弧线。
请注意,您可以编辑样式,而不是\textcolor
对所有标签使用every label
。更新的示例展示了这一点,以及如何更改单个标签的颜色(请注意额外的括号)。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\noindent
\begin{tikzpicture}[scale=3,every label/.style={color=blue}]
\coordinate [label=left:$A$] (A) at (0,0);
\coordinate [label=right:$B$] (B) at (1,0);
\coordinate [label=right:$C$] (C) at (1,1);
\coordinate [label=left:$D$] (D) at (0,1);
\coordinate [label=above:$E$] (E) at ($(D)!.5!(C)$);
\coordinate [label={[black]right:$F$}] (F) at ($(B)!.5!(C)$);
\draw (A) rectangle (C);
\draw [fill] (A) -- (E) circle[radius=.5pt]
-- (F) circle[radius=.5pt] -- (A);
\tkzMarkAngle[fill=red,opacity=.5,size=.3](F,A,E)
\tkzLabelAngle[pos=.4](E,A,F){$\alpha$}
\end{tikzpicture}
\end{document}
答案2
您可以使用rectangle
命令和库中的一些命令calc
来执行此操作。首先是代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\noindent
\begin{tikzpicture}[scale=3]
\coordinate [label=left:\textcolor{blue}{$A$}] (A) at (0,0);
\coordinate [label=right:\textcolor{blue}{$B$}] (B) at (1,0);
\coordinate [label=right:\textcolor{blue}{$C$}] (C) at (1,1);
\coordinate [label=left:\textcolor{blue}{$D$}] (D) at (0,1);
\coordinate [label=above:\textcolor{blue}{$E$}] (E) at ($(D)!.5!(C)$);
\coordinate [label=right:\textcolor{blue}{$F$}] (F) at ($(B)!.5!(C)$);
\path[draw] (A) rectangle (C);
\path[draw, fill] (A) -- (E) circle[black, radius=.5pt];
\path[draw, fill] (A) -- (F) circle[black, radius=.5pt];
\path[draw] (E) -- (F);
\path[draw, fill=red!40] (A) -- ++({atan(.5)}:.3) arc ({atan(.5)}:{90-atan(.5)}:.3) -- (A);
\path[draw] ++(45:.4) node {$\alpha$};
\end{tikzpicture}
\end{document}
现在来解释一下。E
和F
坐标的计算方法是使用部分修饰语。这就是!
你看到的符号。它说取从到x%
线上的点A
B
。因此在我们的例子中,我们取点50%
或0.5
介于点D
和C
或B
和之间以分别C
获得E
和F
。然后我们使用矩形命令和一些单独的路径来绘制线条。最后我们绘制圆弧。请注意,我们还需要绘制线条(或至少其中一条)以获得良好的填充(TikZ 通过闭合路径来填充路径,请尝试不绘制两条线A
)。我们绘制它们两条,因为圆弧是最后绘制的,因此位于现有线条的顶部。我们只需使用一些数学运算(反正切)即可获得正确的角度。最后,我们将节点放置在与原点成 度角的位置.4cm
(缩放,实际上是厘米)。生成的图片:1.2
45
为了说明为什么我认为该arc
方法是处理角度的首选方法,请考虑您想要绘制 周围的所有角度的情况A
。所以BAF
,FAE
和EAD
。当您使用剪辑时,您必须为每个使用不同的范围,并且它不会为您提供有关实际角度的任何其他信息。例如,如果您想打印角度的度数,您仍然需要进行计算。而使用时tan
您有这些信息,因为您已经在计算它了。对于这三个角度,它看起来像这样:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\noindent
\begin{tikzpicture}[scale=3]
\coordinate [label=left:\textcolor{blue}{$A$}] (A) at (0,0);
\coordinate [label=right:\textcolor{blue}{$B$}] (B) at (1,0);
\coordinate [label=right:\textcolor{blue}{$C$}] (C) at (1,1);
\coordinate [label=left:\textcolor{blue}{$D$}] (D) at (0,1);
\coordinate [label=above:\textcolor{blue}{$E$}] (E) at ($(D)!.5!(C)$);
\coordinate [label=right:\textcolor{blue}{$F$}] (F) at ($(B)!.5!(C)$);
\pgfmathsetmacro{\firstAngle}{int(atan(.5)*100)/100}
\path[draw,green,fill=green!40] (A) -- ++(0:.3) arc[start angle=0, delta angle=\firstAngle,radius=.3];
\path[draw] ++(12:.45) node[rotate=12] {\tiny\firstAngle$^\circ$};
\pgfmathsetmacro{\secondAngle}{round((atan(2)-atan(.5))*100)/100}
\path[draw,red, fill=red!40] (A) -- ++(\firstAngle:.3) arc[start angle=\firstAngle, delta angle=\secondAngle,radius=.3];;
\path[draw] ++(45:.45) node[rotate=45] {\tiny\secondAngle$^\circ$};
\pgfmathsetmacro{\thirdAngle}{int((90-atan(2))*100)/100}
\path[draw,blue,fill=blue!40] (A) -- ++(\firstAngle+\secondAngle:.3) arc[end angle=90, delta angle=\thirdAngle, radius=.3];
\path[draw] ++(78:.45) node[rotate=78] {\tiny\thirdAngle$^\circ$};
\path[draw] (A) rectangle (C);
\path[draw, fill] (A) -- (E) circle[black, radius=.5pt];
\path[draw, fill] (A) -- (F) circle[black, radius=.5pt];
\path[draw] (E) -- (F);
\end{tikzpicture}
\end{document}
最终得到如下图片:
请注意,使用裁剪方法也完全可以实现这一点。裁剪确实需要不同的范围,而且如果您想打印角度,您仍然需要进行计算。
答案3
我会增加你的代码来阅读:
\begin{figure}[h!] \centering
\begin{tikzpicture}[scale=3]
\coordinate [label=left:\textcolor{blue}{$A$}] (A) at (0.,0);
\coordinate [label=right:\textcolor{blue}{$B$}] (B) at (1,0);
\coordinate [label=right:\textcolor{blue}{$C$}] (C) at (1,1);
\coordinate [label=left:\textcolor{blue}{$D$}] (D) at (0,1);
\coordinate [label=above:\textcolor{blue}{$E$}] (E) at (0.5,1);
\coordinate [label=right:\textcolor{blue}{$F$}] (F) at (1,0.5);
\draw (A) -- (B);
\draw (A) -- (D);
\draw (B) -- (C);
\draw (C) -- (D);
\draw (A) -- (E);
\draw (A) -- (F);
\draw (E) -- (F);
\fill (E) circle (1pt);
\fill (F) circle (1pt);
\begin{scope}
\path[clip] (A) -- (E) -- (F) -- cycle;
\draw [red, fill=red!20] (A) circle (10pt);
\end{scope}
\end{tikzpicture}
\end{figure}
结果如下
答案4
这里是另一个强调紧凑性的 TikZ 解决方案:(经过 wh1t3 进一步修剪后)
\begin{tikzpicture}
\node[draw,inner sep=2cm,label=45:$C$,label=135:$D$,label=225:$A$,label=-45:$B$] (squ) at (0,0) {};
\draw (squ.225) -- (squ.90) node[draw,circle,fill=red,inner sep=1pt,label={90:$E$}] {};
\draw (squ.225) -- (squ.0) node[draw,circle,fill=red,inner sep=1pt,label={0:$F$}] {};
\draw[fill=red!15] (squ.225) -- ++({atan(0.5)}:1cm) arc ({atan(.5)}:{atan(2)}:1cm)--cycle;
\path (squ.225) ++(45:1.2cm) node {$\alpha$};
\end{tikzpicture}
我只是试着看看我是否可以缩短这些简洁的答案,而不会太过专业。如果你玩一下第inner sep=2cm
3 行,它甚至会给你一个粗略的自定义方法。它可以进一步改进,但既然你已经给出了完整的解决方案,我会把它留给你去品味。