我正在尝试绘制一条具有给定角度的线,并让这条线与一条垂直线相交。
当我从 B 点画一条角度为 150 度、长度为 2 的普通线时,一切都很好。这是绿线,
然后我尝试使用相同的角度和任意长度 6 将一条从 B 开始的线与垂直线 AC 相交。我在交叉点处放置了一个节点 D。节点 D 不在预期的位置。为了说明,我还画了线 BD。很明显,角度不同,并且在相交的情况下是不正确的。
在 MWE 之下:
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate [label=below: {A}] (A) at (0,0);
\coordinate [label=below: {B}] (B) at (3,0);
\coordinate [label=above: {C}] (C) at (0,3);
\draw (B) -- (A) --(C);
\draw[very thick, green] (B) -- +(150:2);
\node [left] (D) at (intersection of B--+150:6 and A--C) {$D$};
\draw [red] (B) -- (D);
\end{tikzpicture}
\end{document}
答案1
你的 MWE 有两个错误的假设:
- 首先,正如 Gonzalo Medina 在他的回答中所解释的那样,坐标
+ 150:6
是从原点而不是从坐标 B 测量的,因此需要将其右移以获得B
- 其次,
D
节点确定的坐标不在线上A--C
,而是在节点的中间,位于该线的左边,即它不指定交点。
考虑到这些,您的代码很容易纠正。实际上,纠正方法还有更多可能性:
- 相反,节点使用带有标签的坐标来指定交点:
\coordinate[label=left:$D$] at (intersection of B--[shift=(B)]150:6 and C--A);
使用节点和坐标绘制红线
D.west
使用节点和坐标绘制红线
D -| A
它们中的任何一个都不需要 tikz 库intersection
。在下面的代码中,我考虑了第二种可能性:
\documentclass[border=3mm,
tikz,
]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate [label=below: {A}] (A) at (0,0);
\coordinate [label=below: {B}] (B) at (3,0);
\coordinate [label=above: {C}] (C) at (0,3);
\draw (B) -- (A) --(C);
\draw[very thick,green] (B) -- +(150:3);
\node [left] (D) at (intersection of B--[shift=(B)]150:6 and C--A) {$D$};
\draw [red] (B) -- (D.east);
\end{tikzpicture}
\end{document}
其结果如下:
答案2
最好使用intersections
图书馆来完成这样的工作。
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\coordinate [label=below: {A}] (A) at (0,0);
\coordinate [label=below: {B}] (B) at (3,0);
\coordinate [label=above: {C}] (C) at (0,3);
\draw (B) -- (A);
\draw[name path = vert] (A)--(C);
\draw[very thick, green] (B) -- +(150:2cm);
%For intersections
\path[name path = angled] (B) -- +(150:6cm);
\path [name intersections={of=vert and angled, by={a}}];
\node [left] (D) at (a) {$D$};
\draw [red] (B) -- (a);
\end{tikzpicture}
\end{document}
\draw [red] (B) -- (a);
被用作节点D
使用left
,并且所有节点都有inner sep
,使得线路错误。
答案3
这answer by Harish Kumar
提供了准确且推荐的方法来达到正确的目的,即使用intersections
库,但没有解释原始代码的问题。下面是解释。
这里的问题是使用
\node [left] (D) at (intersection of B--+150:6 and A--C) {$D$};
A--C
你正在寻找直线与直线的交点B-K
,其中点K
位于6
与150
起源,不是来自B
。
如果你想引入转变,B
你可以使用
B--[shift={(150:6)}]B
这改善了情况;但是,由于计算不准确,仍然没有得到正确的点:
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\coordinate [label=below: {A}] (A) at (0,0);
\coordinate [label=below: {B}] (B) at (3,0);
\coordinate [label=above: {C}] (C) at (0,3);
\draw (B) -- (A) --(C);
\draw[very thick, green] (B) -- +(150:2);
\node (K) at (150:6) {K};
\node [left] (D) at (intersection of B--[shift={(150:6)}]B and A--C) {$D$};
\draw [red] (B) -- (D);
\end{tikzpicture}
\end{document}
我猜想这些不准确性就是为什么这种方法在 PGF 手册中没有得到很好记录的原因。
这里最合适的方法是使用该intersections
库:
\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\coordinate [label=below: {A}] (A) at (0,0);
\coordinate [label=below: {B}] (B) at (3,0);
\coordinate [label=above: {C}] (C) at (0,3);
\draw (B) -- (A);
\draw[name path = vert] (A)--(C);
\draw[very thick, green] (B) -- +(150:2cm);
\path[name path = angled] (B) -- +(150:6cm);
\draw[red,name intersections={of=vert and angled, by={a}}]
node [left] (D) at (a) {$D$}
(B) -- (a);
\end{tikzpicture}
\end{document}