如何正确绘制带有两条切线标记直角的圆

如何正确绘制带有两条切线标记直角的圆

这两天我一直在尝试画一个像下面这个草稿一样精确的图形。

有两条切线段的圆

在网上搜索后,我测试了很多软件和脚本语言。其中两种脚本语言很有前景。

  1. 技巧
  2. tkz-欧几里得

使用技巧我能够画出圆、圆心和切线。问题是我找不到表示直角的方法。我无法做到这一点,因为脚本psCircleTangents不会返回两个点,而是返回一个点的标签,我无法使用此标签来构建直角标记,例如,使用psframe

\documentclass[11pt,a4paper,twoside]{article}
\usepackage{pstricks-add} % loads also pst-node

\begin{document}

\begin{pspicture}(0,3)(10,10)

\pscircle(8,0){2} %circle
\psdot(8,0)   % circle center
\psdot(0,-3) % a random point
\psCircleTangents(0,-3)(8,0){2} % script that calculates two tangent points 
\pcline[nodesep=0,linecolor=blue](0,-3)(CircleT1) % drawing the tangent line to the first calculated tangent
\pcline[nodesep=0,linecolor=blue](0,-3)(CircleT2) % same for the second tangent

\end{pspicture}
\end{document}

我第二次尝试是使用tkz-欧几里得包。由于文档只有法语,我无法完全理解包的动态。我能够模仿与第一个脚本生成的相同图片,但理解程度不高。

\documentclass[11pt,a4paper,twoside]{article}

\usepackage{tikz}
\usepackage{tkz-euclide}
\usetkzobj{all}

\begin{document}

\begin{tikzpicture}

\tkzInit
\tkzDefPoint(0,0){O}
\tkzDefPoint(6,6){E}
\tkzDefPoint(2,2){A}

\tkzDrawCircle(O,A)

\tkzTangent[from=E](O,A) \tkzGetPoints{e}{f}
\tkzGetPoints{k}{l}

\tkzDrawLines[](E,e E,l)


\end{tikzpicture}

\end{document} 

看起来第一个 PSTricks 更优雅,但我无法分割我需要使用的点。

问题 1:可以这样吗?

问题2:有人知道如何在 tkz-Euclide 处取切线以及如何正确画直角吗?

问题 3:还有其他选项可以用来绘制此图形吗?我已经尝试了以下方法:

  • Geogebra
  • LaTeX绘图
  • 欧氏藻

非常感谢,

答案1

参见“tikz & pgf 手册”,第 137 页顶部:

在此处输入图片描述

从手册中提取的代码:

\begin{tikzpicture}
\draw[help lines] (0,0) grid (3,2);
\coordinate (a) at (3,2);
\node [circle,draw] (c) at (1,1) [minimum size=40pt] {$c$};
\draw[red] (a) -- (tangent cs:node=c,point={(a)},solution=1) --
(c.center) -- (tangent cs:node=c,point={(a)},solution=2) -- cycle;
\end{tikzpicture}

答案2

您快完成了。只需对您的代码进行轻微修改即可:

\documentclass{standalone}
\usepackage{tkz-euclide}
% \usetkzobj{all} % useless with the last version >= 3.01
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){O}
\tkzDefPoint(12,0){E}
\tkzDefPoint(2,2){A}
\tkzDrawCircle(O,A)
\tkzLabelPoint(O){$O$}

\tkzTangent[from=E](O,A) \tkzGetPoints{e}{f}
\tkzDrawSegments(O,e O,f O,E)
\tkzMarkSegment[size=5pt,pos=.5,mark=|](e,E)
\tkzMarkSegment[size=5pt,pos=.5,mark=|](f,E)
\tkzMarkSegment[size=5pt,pos=.5,mark=||](O,E)
\tkzGetPoints{k}{l}

\tkzDrawSegments[](E,e E,l)
\tkzMarkRightAngle(O,e,E)
\tkzMarkRightAngle(O,f,E)
\end{tikzpicture}
\end{document} 

Gummi 中运行的输出为: 在此处输入图片描述

一些评论。使用\usetkzobj允许它识别圆和其他物体。在每个图表中都有它并没有坏处tkz-euclide。首先,您定义点 O(中心)、点 E(用于构造切线)和点 A(圆上的点)。\tkzDrawCircle绘制以 O 为中心经过点 A 的圆。然后我标记了点 O。宏\tkzTangent计算从点 E 到以 O 为中心包含 A 的圆的切线。有两个可能的切点,它们被计算并放入变量 e 和 f 中。接下来,您想要绘制线段而不是线,以便线段在您要求的位置开始和停止。画一条线会在每一端在线段上添加一点。绘制段并使用创建标记\tkzMarkSegment。大小决定标记的大小,0.5 表示它位于中间,并mark=|设置要使用的标记。第 77 页的文档表示mark=|||有效。\tkzMarkRightAngle创建直角标记,其中中点是直角的顶点。

我不熟悉 pstricks。最初我几年前就研究过它,但发现tkz-euclide它更容易使用。谷歌翻译可以帮助你了解基础知识。还有一些网站提供相关信息,例如这个。请注意该网站也有圆形和三角形的页面。

答案3

我也不懂法语。

在此处输入图片描述

\documentclass[11pt,a4paper,twoside]{article}
\usepackage{tkz-euclide}
% \usetkzobj{all} % useless with version >= 3.01
\usetikzlibrary{decorations.markings}
\begin{document}

\begin{tikzpicture}

\tkzInit
\tkzDefPoint(0,0){O}
\tkzDefPoint(6,0){E}
\tkzDefPoint(2,2){A}

\tkzDrawCircle(O,A)

\tkzTangent[from=E](O,A) \tkzGetPoints{e}{f}


%\tkzDrawLines[](E,e E,l)
\draw[-,postaction={decorate},decoration = {markings,mark=at position 0.5 with
  {\draw[-] (0pt,-3pt)--(0pt,3pt);}}](E)--(e);
\draw[-,postaction={decorate},decoration = {markings,mark=at position 0.5 with
  {\draw[-] (0pt,-3pt)--(0pt,3pt);}}](E)--(f);

\tkzInterLC(E,O)(O,A) \tkzGetPoints{k}{l}
\draw[-,postaction={decorate},decoration = {markings,mark=at position 0.6 with
  {\draw[-] (-2pt,-3pt)--(-2pt,3pt);
  \draw[-] (0pt,-3pt)--(0pt,3pt);
  \draw[-] (2pt,-3pt)--(2pt,3pt);}}](E)--(k);

\end{tikzpicture}

\end{document} 

更新:我还注意到,单标记和双标记是内置的,但三标记不是内置的tkz-euclide

\documentclass[11pt,a4paper,twoside]{article}

\usepackage{tkz-euclide}
%\usetkzobj{all}  % useless with version >= 3.01
\usetikzlibrary{decorations.markings}
\begin{document}

\begin{tikzpicture}

\tkzInit
\tkzDefPoint(0,0){O}
\tkzDefPoint(6,0){E}
\tkzDefPoint(2,2){A}

\tkzDrawCircle(O,A)

\tkzTangent[from=E](O,A) \tkzGetPoints{e}{f}


%\tkzDrawLines[](E,e E,l)
\draw[-](E)--(e);
\draw[-](E)--(f);

 \tkzMarkSegments[mark=s|,mark size=6pt](E,e E,f)
  \draw[-] (f) -- (O) -- (e);

\tkzInterLC(E,O)(O,A) \tkzGetPoints{k}{l}
\draw[-,postaction={decorate},decoration = {markings,mark=at position 0.6 with
  {\draw[-] (-4pt,-3pt)--(-2pt,3pt);
  \draw[-] (-1pt,-3pt)--(1pt,3pt);
  \draw[-] (2pt,-3pt)--(4pt,3pt);}}](E)--(k);
% \tkzDrawSegment(E,k)
% \tkzMarkSegments[mark=s|||,mark size=6pt](E,k) %<- does not seem to work

\end{tikzpicture}

\end{document} 

在此处输入图片描述

答案4

这是一个带有 的简码pst-eucl,用于显示建造从一个点到一个圆的切线,直角标记为:

\documentclass[11pt, a4paper, twoside, svgnames]{standalone}
\usepackage{pstricks-add} % loads also pst-node
\usepackage{pst-eucl} % for plane geometry
\usepackage{auto-pst-pdf} % to compile with pdflatex --enable-write18 (MiKTeX) or pdflatex --shell-escape (TX Live, MacTeX))

\begin{document}

\begin{pspicture}(15,10)
\psset{PointSymbol=none, dotsize = 2.5pt, linejoin = 1, dimen = outer}
\pstGeonode[PosAngle = {0,90}](8, 0){O}(0,-3){M}
\pstCircleOA[Radius=\pstDistVal{2}, linecolor = IndianRed, linewidth = 1.2pt]{O}{}
\pstMiddleAB[ PointName=none]{O}{M}{I}
\psset{linewidth=0.6pt,}
\pstInterCC[RadiusA=\pstDistVal{2}, DiameterB=\pstDistAB{O}{M},
CodeFigB=true, CodeFigColor=Gold, PosAngleA = -45, PosAngleB=90]{O}{}{I}{}{A}{B}
\psset{linecolor=Tomato, linewidth=0.6pt, nodesep=-2}
\pstLineAB{M}{A}\pstLineAB{M}{B}
\psline(A)(O)(B)
\psset{linecolor = LightSalmon}
\pstRightAngle*{M}{A}{O}
\pstRightAngle{M}{B}{O}
\psdots[dotsize = 2.5pt, linecolor = black](O)(M)(A)(B)
\end{pspicture}

\end{document} 

在此处输入图片描述

相关内容