TikZ:如何找到两条延长线的交点?

TikZ:如何找到两条延长线的交点?

如何画一条过一个点并垂直于另一个点的线?我学会了使用shorten来延长线。但延长的部分似乎并不“真正存在”。例如,我想连接两个预定义的点并将线段延长 1cm,然后将新的端点定义为“C”以供以后使用。但\draw[shorten >=-1cm] (A) -- (B) coordinate (C)只会给我一个 C,而实际上它仍然是 B。

我真正需要做的是找到两条延长线的交点,但我认为困难的部分是让延长线“真实”。

答案1

您说得对,该shorten >语法实际上并没有“延伸”线条,而是在较低级别上起作用。对于您的情况,我会使用\usetikzlibrary{calc},它可以让您访问许多巧妙的坐标计算。

您可以使用以下语法实现所需的结果

\draw (A) -- ($(B)!-1cm!(A)$) coordinate (C);

其中($...$)括起语法calc,并且指定位于 从到 的线上(<first node>)!<distance>!(<second node>)的坐标。<distance><first node><second node>

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}
\fill (0,0) circle [radius=2pt] node (A) [label=A] {};
\fill (2,1) circle [radius=2pt] node (B) [label=B] {};
\fill (3.2,1) circle [radius=2pt] node (C) [label=C] {};
\fill (4,0.5) circle [radius=2pt] node (D) [label=D] {};
\draw [name path=AB] (A) -- ($(B)!-1cm!(A)$);
\draw [name path=CD] (D) -- ($(C)!-1cm!(D)$);

\fill [red,name intersections={of={AB and CD}}] (intersection-1) circle [radius=2pt];
\end{tikzpicture}
\end{document}

答案2

如果您使用tkz-euclide(尽管文档只有法语),这会容易得多:

\documentclass{article}

\usepackage{tkz-euclide}

\begin{document}
\begin{tikzpicture}

\tkzDefPoint(0,0){A} \tkzDefPoint(2,1){B}
\tkzDefPoint(3.2,1){C} \tkzDefPoint(4,0.5){D}

\tkzInterLL(A,B)(C,D) \tkzGetPoint{I}
\tkzDrawLines(A,I D,I)
\tkzDrawPoints[color=blue](A,B,C,D) \tkzDrawPoint[color=red](I)
\tkzLabelPoints[above](I,A,B,C,D)

\end{tikzpicture}
\end{document}

您还可以编写一段代码来检查坐标并自动化\tkzDrawLines命令的选择点,然后使用任意坐标(如果需要),但我太懒了,不想这样做。:)

答案3

将此视为原始问题的补充答案,因为解决方案是使用pstricks

pstricks-add通过宏提供此交点 \psIntersectionPoint(<P0>)(<P1>)(<P2>)(<P3>){<node name>},其中P0P1定义一条直线(例如0-1),和P2定义P3另一条直线(例如2-3)。是和<node name>的交点处保存的节点的名称。以下示例直接取自0-12-3pstricks-add包装文档

\documentclass{article}
\usepackage{pstricks-add}% http://ctan.org/pkg/pstricks-add}
\begin{document}
\psset{unit=0.5cm}
\begin{pspicture}(-5,-4)(5,5)
  \psaxes[labelFontSize=\scriptstyle,
    dx=2,Dx=2,dy=2,Dy=2]{->}(0,0)(-5,-4)(5,5)
  \psline[linecolor=red,linewidth=2pt](-5,-1)(5,5)
  \psline[linecolor=blue,linewidth=2pt](-5,3)(5,-4)
  \qdisk(-5,-1){2pt}\uput[-90](-5,-1){A}
  \qdisk(5,5){2pt}\uput[-90](5,5){B}
  \qdisk(-5,3){2pt}\uput[-90](-5,3){C}
  \qdisk(5,-4){2pt}\uput[-90](5,-4){D}
  \psIntersectionPoint(-5,-1)(5,5)(-5,3)(5,-4){IP}
  \qdisk(IP){3pt}\uput{0.3}[90](IP){IP}
  \psline[linestyle=dashed](IP|0,0)(IP)(0,0|IP)
\end{pspicture}
\end{document}

使用 PStricks 在二维空间中求两条线的交点

相关内容