创建此图像的最佳方式是正方形和角度

创建此图像的最佳方式是正方形和角度

我刚刚开始研究 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}

现在来解释一下。EF坐标的计算方法是使用部分修饰语。这就是!你看到的符号。它说取从到x%线上的点AB。因此在我们的例子中,我们取点50%0.5介于点DCB和之间以分别C获得EF。然后我们使用矩形命令和一些单独的路径来绘制线条。最后我们绘制圆弧。请注意,我们还需要绘制线条(或至少其中一条)以获得良好的填充(TikZ 通过闭合路径来填充路径,请尝试不绘制两条线A)。我们绘制它们两条,因为圆弧是最后绘制的,因此位于现有线条的顶部。我们只需使用一些数学运算(反正切)即可获得正确的角度。最后,我们将节点放置在与原点成 度角的位置.4cm(缩放,实际上是厘米)。生成的图片:1.245

TikZ 矩形

为了说明为什么我认为该arc方法是处理角度的首选方法,请考虑您想要绘制 周围的所有角度的情况A。所以BAFFAEEAD。当您使用剪辑时,您必须为每个使用不同的范围,并且它不会为您提供有关实际角度的任何其他信息。例如,如果您想打印角度的度数,您仍然需要进行计算。而使用时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}

最终得到如下图片:

修改后的 TikZ 矩形

请注意,使用裁剪方法也完全可以实现这一点。裁剪确实需要不同的范围,而且如果您想打印角度,您仍然需要进行计算。

答案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=2cm3 行,它甚至会给你一个粗略的自定义方法。它可以进一步改进,但既然你已经给出了完整的解决方案,我会把它留给你去品味。

相关内容