从圆外的一点画一条切线到圆上!

从圆外的一点画一条切线到圆上!

我有一个简单的问题。我想从原点绘制切线到一个圆心为 (0,2) 且半径为 1.5 的圆。以下是圆的代码:

\begin{tikzpicture}
\draw[->] (0,-.5) -- (3,-.5) node[right] {$x$}; 
\draw[->] (0,-.5) -- (0,2) node[above] {$y$};
\draw (0,2) circle (1.5);
\end{tikzpicture}

我需要一个简单的解决方案,因为我不擅长用 绘图tikz。谢谢!

答案1

切线坐标系

TikZ 知道形状的切线坐标系,如果calc加载了库,请参阅 PGF/TikZ 手册的“13.2.4 切线坐标系”一节。

将圆绘制为具有圆形形状的节点:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw[->] (0,-.5) -- (3,-.5) node[right] {$x$};
\draw[->] (0,-.5) -- (0,2) node[above] {$y$};
% \draw (0,2) circle (1.5);
\node[circle, draw] (c) at (0, 2) [minimum size=3cm] {};
\draw[red]
  (0, 0) coordinate (a)
  -- (tangent cs:node=c, point={(a)}, solution=1)
  (0, 0)
  -- (tangent cs:node=c, point={(a)}, solution=2)
;
\end{tikzpicture}
\end{document}

结果

三角函数

可以使用以下公式计算线的角度和长度正弦定理勾股定理

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[->] (0,-.5) -- (3,-.5) node[right] {$x$};
\draw[->] (0,-.5) -- (0,2) node[above] {$y$};
\draw (0,2) circle (1.5);
\pgfmathsetmacro\angle{asin(1.5/2)}
\pgfmathsetmacro\len{sqrt(2*2 - 1.5*1.5)}
\draw[red]
  (0, 0) -- (90 - \angle:\len)
  (0, 0) -- (90 + \angle:\len)
;
\end{tikzpicture}
\end{document}

交叉口

评论中的问题可以用库来解决intersections。定义一条穿过圆的线。然后计算交点并绘制线:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\draw[->] (0,-.5) -- (3,-.5) node[right] {$x$};
\draw[->] (0,-.5) -- (0,2) node[above] {$y$};
\draw[name path=circle] (0,2) coordinate (center) circle (1.5);
\coordinate (arbitrary point) at ($(center) + (-80:1.5)$);
% PGF/TikZ manual: 13.5.4 The Syntax of Distance Modifiers
\path[name path=line] (0, 0) -- ($(arbitrary point)!3cm!180:(0, 0)$);
\draw[red, name intersections={of=circle and line}]
  (0, 0) -- (intersection-1);
\end{tikzpicture}
\end{document}

结果

答案2

它不完全是 tikz,但这里是 tkz-euclide。Tikz 是我最喜欢的绘制几何图形的工具,但我为数学老师构建了 tkz-euclide,以便使用类似于 Latex 的工具和语法获得结果。Euclide 基于 tikz,您可以使用 tikz 中的选项和命令。

\documentclass[11pt]{scrartcl}
\usepackage{tkz-euclide}
\usetkzobj{all}

\begin{document}

    \begin{tikzpicture}[scale=2]
        \tkzInit[xmin=0,xmax=3,ymin=-0.5,ymax=3]
             % axis defined by Init
        \tkzDrawX[noticks] \tkzDrawY[noticks]
             % it's fine to use points with names
             % rule if you use an object, you use parenthesis
             %      if you want to get an object, you use  curly braces
        \tkzDefPoints{0/2/A,0/0/O}
        \tkzDrawCircle[R](A,1.5 cm) % option R I use a radius
                                    % with \tkzDefPoint(1.5,2){C} 
                                    % \tkzDrawCircle(A,C)
        \tkzTangent[from with R=O](A,1.5 cm)  \tkzGetPoints{a}{b}
              % or \tkzTangent[from O](A,C)
        \tkzDrawSegments[color=green!50!black](O,a O,b A,a)
        \tkzMarkRightAngle(A,a,O)
              %  possible get a random point on the circle
              %  \tkzGetRandPointOn[circle=center A radius 1.5cm]{M}
              %  \tkzDrawSegment[color=red](O,M)
        \tkzDefPoint(1,4){B}
        \tkzInterLC[R](O,B)(A,1.5cm) \tkzGetPoints{x}{y}
              % or \tkzInterLC(O,B)(A,C)
        \tkzDrawSegment[color=red](O,x)
    \end{tikzpicture}   
\end{document}

在此处输入图片描述

答案3

我认为 tkz-euclide 是一款很棒的工具,但它仍然不稳定,如果你编写了一些代码,然后在几年后重新使用它,那么就会出现问题。答案必须根据你使用的版本进行调整:

  • 对于版本 1.16(已给出答案):\tkzTangent[from ...]
  • 对于版本 3.06: \tkzDefTangent[from = ...]
  • 对于版本 4.2: \tkzDefLine[tangent from = ...]

问题是,如果您使用链接到 Overleaf 或 Linux 发行版(在我的情况下是 Mint)的 Latex 包,则要确切知道您正在使用哪个版本。

  • 我的 Latex 软件包通过发行版更新,这非常方便,但并不总是最新版本。此外,Mint 是基于 Debian 的,因此安装和更新TexLive 插件并不容易,甚至令人气馁。

  • 您可能会在没有任何诊断的情况下得到错误的绘图!只需检查以下 MWE:

\documentclass{article}
\usepackage{tikz}
\usepackage{tkz-fct}
\usepackage{tkz-euclide}
\usepackage[active,tightpage]{preview}
 \begin{document} 
\PreviewEnvironment{tikzpicture} .
\setlength\PreviewBorder{5pt}
\begin{tikzpicture}
\clip (-5,-4.5) rectangle (8.5,4);
\def \Xa{0}
\def \Ya{0}
\def \Xid{2*sqrt(3) + 2*sqrt(2)}
\def \Yid{2}
\def \rd{2}
\def \Xtab{2*sqrt(3) + 2*sqrt(2)}
\def \Ytab{0}
\def \Xtbc{2*sqrt(2) + 8*sqrt(3)/3}
\def \Ytbc{2*sqrt(6)/3 + 2}
\def \Xap{-2*sqrt(3) - 2*sqrt(2)}
\def \Yap{-sqrt(6) - 2}
\coordinate (Ap) at ({\Xap},{\Yap});
\coordinate (A) at ({\Xa},{\Ya});
\coordinate (I) at ({ \Xid },{\Yid });
\coordinate (K) at ({ \Xtbc },{ \Ytbc });
\coordinate (M) at ({ \Xtab },{\Ytab });
\tkzDrawCircle[blue](I,K);
%%% from manual tkz-euclide tool for Euclidean Geometry V3.06c p94
\tkzDefTangent[from = Ap](I,M) \tkzGetPoints{R}{Q};
\tkzDrawSegment[green](Ap,R);
%%% from manual tkz-euclide Euclidean Geometry V4.2c p43
\tkzDefLine[tangent from = Ap](I,M) \tkzGetPoints{Rp}{Qp}
\tkzDrawSegment[red](Ap,Rp);
\end{tikzpicture}
\end{document}



您将获得完美的编译和以下结果,没有警告!
从给定点切向圆

就我而言,版本 3.06 给出了正确的结果,而不是最新的版本 4.2...

相关内容