如何在 TikZ 中使用 pgf

如何在 TikZ 中使用 pgf

背景:我了解 TiZ 建立在 pgf 之上。两者都在 pgf 手册中进行了描述。但是,我无法找到手册中描述两者如何连接的部分(如果有的话)。这对我来说是个问题,因为我喜欢 Ti 的高级构造Z,但我注意到 pgf 中有许多有用的原语,但我不知道如何访问。

举个例子,考虑这张简单的图片:

两条线段及其延长线的交点

有两条短的、不相交的线段。圆圈标记延长线相交的点。线段和节点标签是用 Ti 创建的Z,与 pgf 的交点。

以下是从手册中摘录并稍作修改的代码:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=20mm,y=20mm]
  \draw
  (.5,0) node[left](A){$A$} -- (1,.8) node[left]{B}
  (2,0) node[left](C){$C$} -- (1.5,1) node[right](D){D};
  \pgfpathcircle{%
    \pgfpointintersectionoflines
      {\pgfpointxy{.5}{0}}{\pgfpointxy{1}{.8}}
      {\pgfpointxy{2}{0}}{\pgfpointxy{1.5}{1}}}
    {2pt}
  \pgfusepath{stroke}
\end{tikzpicture}
\end{document}

显然,代码不是 DRY:坐标在 pgf 部分重复。但如果点 A–D 本身是计算的结果,那么这不是一个可行的选择。另外,我可以交点,但我不能使用在 Ti 的进一步工作中Z 级。因此我的问题是:

  • \pgfpointintersectionoflines我该如何用其他 pgf 构造可以使用的术语来表示点 A-D ?
  • 我如何从 pgf 世界中提取结果,以便在 Ti 中进一步使用Z世界?

请注意,我正在寻找可以概括的答案,而不是仅适用于当前问题的答案。

答案1

除了 Torbjørn T. 所说的之外,您还可以使用现有的节点/坐标\pgfpointanchor{<name>}{<anchor>}

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=20mm,y=20mm]
  \draw
  (.5,0) node[left](A){$A$} -- (1,.8) node[left](B){B}
  (2,0) node[left](C){$C$} -- (1.5,1) node[right](D){D};  
   \pgfcoordinate{aux}{\pgfpointintersectionoflines
      {\pgfpointanchor{A}{east}}{\pgfpointanchor{B}{east}}
      {\pgfpointanchor{C}{east}}{\pgfpointanchor{D}{west}}}
   \pgfpathcircle{\pgfpointanchor{aux}{center}}{2pt}
  \pgfusepath{stroke}
  \draw (aux) -- (aux|-A.south);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我自己也想出了另一个解决方案。它不如 Marmot 的答案那么好,但由于它是解决同一问题的不同方法,可能会启用一组不同的选项,因此我在此提供它,以供记录:

\documentclass[tikz]{standalone}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}[x=20mm,y=20mm]
  \draw
  (.5,0) coordinate(A) node[left]{$A$} -- (1,.8) coordinate(B) node[left]{B}
  (2,0) coordinate(C) node[left]{$C$} -- (1.5,1) coordinate(D) node[right]{D};
  \tikzmath{
    coordinate \A; \A = (A);
    coordinate \B; \B = (B);
    coordinate \C; \C = (C);
    coordinate \D; \D = (D); }
  \pgfcoordinate{E}{
    \pgfpointintersectionoflines
      {\pgfpoint{\Ax}{\Ay}}{\pgfpoint{\Bx}{\By}}
      {\pgfpoint{\Cx}{\Cy}}{\pgfpoint{\Dx}{\Dy}}}
  \draw (E) circle[radius=2pt];
\end{tikzpicture}
\end{document}

在此过程中,我了解了\pgfpoint(画布坐标?)和\pgfpointxy(用户坐标)之间的区别。

相关内容