使用极坐标求线的交点

使用极坐标求线的交点

我正在尝试绘制一条具有给定角度的线,并让这条线与一条垂直线相交。

当我从 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,而是在节点的中间,位于该线的左边,即它不指定交点。

考虑到这些,您的代码很容易纠正。实际上,纠正方法还有更多可能性:

  1. 相反,节点使用带有标签的坐标来指定交点:

\coordinate[label=left:$D$] at (intersection of B--[shift=(B)]150:6 and C--A);

  1. 使用节点和坐标绘制红线D.west

  2. 使用节点和坐标绘制红线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位于6150起源,不是来自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}

在此处输入图片描述

相关内容