我正在尝试一个简单的任务,即绘制圆的切线。虽然我已经成功使用了切线 cs 选项,但我还想使用库来calc
获取精确的交点。我只是从圆的中间开始,通过相邻边和斜边的 acos 计算到交点的相应角度。第一个是半径,第二个我希望由库计算calc
。这是我尝试的:
\begin{tikzpicture}
\coordinate (A) at (13,9);
\coordinate (T) at (10,2);
%
\draw (T) circle (2);
\draw let \p1 = ($(A)-(T)$) in (T) --++ ({acos(divide(2,veclen(\x1,\y1)))}:2)--(A);
\draw (T) --++ ({acos(2/sqrt(3^2+7^2))}:2)--(A);
\draw (T) -- (A);
\end{tikzpicture}
但是,两个交点都不正确。这是为什么呢?
答案1
就像 Alex 写的,你需要添加atan(7/3)
,但如果你想使用,veclen
你还需要修改你的表达式来计算角度
备注:比较下一个代码(\x1 =85.35823pt \y1=199.1692pt)
\pgfmathparse{veclen(85.35823pt,199.1692pt)} \pgfmathresult
\pgfmathparse{veclen(3,7)} \pgfmathresult
\pgfmathparse{veclen(3cm,7cm)} \pgfmathresult
pgfmanual 仅提供
veclen(x,y) \pgfmathveclen{x}{y}
计算 sqrt(x^2 + y^2)。这使用多项式近似,基于 Rouben Rostamian 的想法12.99976 的结果
\pgfmathparse{veclen(12,5)} \pgfmathresult
这还不够。尺寸单位是 pt。您可以给出其他单位,例如,\pgfmathparse{veclen(12cm,5cm)} \pgfmathresult
结果是 369.87305,但单位是 pt。也可以,\pgfmathparse{veclen(12cm,5pt)}
但混合使用单位不是个好主意。
带有 veclen 的完整代码
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (13,9);
\coordinate (T) at (10,2);
%
\draw (T) circle (2);
\draw[red] let \p1 = ($(A) - (T)$), \n1={veclen(\x1/28.45274,\y1/28.45274)} in
(T) -- ++({atan(\y1/\x1) - acos(divide(2,\n1))}:2) -- (A);
% or acos(divide(2cm,veclen(\x1,\y1)))}:2
% instead of acos(divide(2,veclen(\x1/28.45274,\y1/28.45274)))}:2
\draw[red] let \p1 = ($(A) - (T)$), \n1={veclen(\x1/28.45274,\y1/28.45274)} in
(T) -- ++({atan(\y1/\x1) + acos(divide(2,\n1))}:2) -- (A);
\draw (T) -- (A);
\end{tikzpicture}
\end{document}
最简单的方法veclen
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (13,9);
\coordinate (T) at (10,2);
\draw (T) circle (2);
\draw let \p1 = ($(A)-(T)$), \n1={acos(divide(2cm,veclen(\x1,\y1)))}
in (T) -- ++ ({atan(\y1/\x1) - \n1}:2)--(A)
(T) -- ++ ({atan(\y1/\x1) + \n1}:2)--(A);
\draw (T) -- (A);
\end{tikzpicture}
\end{document}
答案2
操作员++
不会将您的角度添加到方向角度中(T)--(A)
。也许可以尝试以下方法:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (13,9);
\coordinate (T) at (10,2);
%
\draw (T) circle (2);
\draw (T) -- ++({atan(7/3) - acos(2/sqrt(3^2+7^2))}:2) -- (A);
\draw (T) -- ++({atan(7/3) + acos(2/sqrt(3^2+7^2))}:2) -- (A);
\draw (T) -- (A);
\end{tikzpicture}
\end{document}