sqrt 和 veclen 计算距离的不同结果

sqrt 和 veclen 计算距离的不同结果

我正在尝试一个简单的任务,即绘制圆的切线。虽然我已经成功使用了切线 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}

在此处输入图片描述

相关内容