![在 tikz 中使用斜率方程继续绘制一条新线无法按预期工作](https://linux22.com/image/465422/%E5%9C%A8%20tikz%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%96%9C%E7%8E%87%E6%96%B9%E7%A8%8B%E7%BB%A7%E7%BB%AD%E7%BB%98%E5%88%B6%E4%B8%80%E6%9D%A1%E6%96%B0%E7%BA%BF%E6%97%A0%E6%B3%95%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
我有以下最小工作示例:
\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 帮你算一下,比如找到通过的A
点B
通过的垂直线相交的点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}