在 tikz 中使用斜率方程继续绘制一条新线无法按预期工作

在 tikz 中使用斜率方程继续绘制一条新线无法按预期工作

我有以下最小工作示例:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
\coordinate (A) at (-1, 1);
\coordinate (B) at (2, 2);

\draw (A) -- (B);
\draw[dashed] let \p1 = (A), \p2 = (B) in (B) -- (5, {((\y2-\y1)/(\x2-\x1))*(5-\x1) + \y1});
\end{tikzpicture}
\end{document}

我们知道,直线方程可以用以下公式计算:

y-y0 = m(x-x0)

其中斜率 m = (y1-y0)/(x1-x0)。

在这里,您可以看到,在我的情况下 x = 5,但新行并不像预期的那样遵循原始行。相反,我得到了以下内容:

在此处输入图片描述

但是当选择 x = 0 时,它以某种方式起作用。我不知道为什么它没有像预期的那样在其他点上起作用。

答案1

一旦评估了坐标,PGF / TikZ 只知道其在canvas坐标系单位)。xyz坐标系只需改变你的X值(没有单位)进入canvas坐标系。(默认情况下,对于X这意味着仅与 相乘1cm。)

和简写\x\y返回canvas坐标系中的值,并且确实允许 TeX 编写

((\y2-\y1)/(\x2-\x1))*(5-\x1) + \y1

在页面或日志文件中将导致

((56.90549pt-28.45274pt)/(56.90549pt–28.45274pt))*(5–28.45274pt)+28.45274pt

现在, lonely5将被解释为 和5pt而不是5(或5cm)。


一个解决方案是解析(5, <any y value>)\p3使用\x3而不是5或者你可以使用未记录的intersection of坐标规范让 TikZ 帮你算一下,比如找到通过的AB通过的垂直线相交的点X= 5。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (-1, 1);
\coordinate (B) at (2, 2);

\draw (A) -- (B);
\draw[dashed] let \p1 = (A),
                  \p2 = (B),
                  \p3 = (5,0) in
  (B) -- (5, {((\y2-\y1)/(\x2-\x1))*(\x3-\x1) + \y1});
\end{tikzpicture}
\begin{tikzpicture}
\coordinate (A) at (-1, 1);
\coordinate (B) at (2, 2);

\draw (A) -- (B);
\draw[dashed] (B) -- (intersection of A--B and 5,0--5,1);
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案2

使用tzplot

在此处输入图片描述

\documentclass{standalone} 

\usepackage{tzplot}

\begin{document}

\begin{tikzpicture}
\tzcoors(-1,1)(A)(2,2)(B);
\tzLFn(A)(B)[-1:5]<edge[dashed,blue] ([turn]0:5cm)> % to extend
\end{tikzpicture}

\end{document}

同样地,你也可以:

\documentclass{standalone} 

\usepackage{tzplot}

\begin{document}

\begin{tikzpicture}
\tzcoors(-1,1)(A)(2,2)(B);
\tzLFn(A)(B)[-1:5]
\tzpointangle(A)(B){\angleAB} % calculate the angle
\tzLFn[dashed](B){tan(\angleAB)}[5:10]
\end{tikzpicture}

\end{document}

相关内容