从 TikZ 中的坐标提取 x 值

从 TikZ 中的坐标提取 x 值

也许我很笨,我看了很多例子,这些例子以某种方式显示了坐标的工作,但我不明白。简单的例子-我有:

\begin{tikzpicture}
   \coordinate [label=left:$D$] (D) at (0.3,0.5);
\end{tikzpicture}

现在我想在下一个 \draw 命令中使用我的坐标的 x 部分,但我不知道如何简单地提取它。

\draw[name path=my_line, gray] (**x-part of D coordinate**,0) node[below, red]{$c$} -- (0.75,1.1);

我希望我的问题是显而易见的。谢谢!

答案1

您可以使用let语法(参见章节14.15 Let 操作手册);另一种选择(由敲击在注释中)的方法是使用|-语法(手册第 131 页)。以下示例包含两种可能性:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\begin{document}

\begin{tikzpicture}
  \coordinate [label=left:$D$] (D) at (0.3,0.5);
  \draw[name path=my_line, gray] let \p1=(D) in (\x1,0) node[below, red] {$c$} -- (0.75,1.1);
\end{tikzpicture}

\begin{tikzpicture}
  \coordinate [label=left:$D$] (D) at (0.3,0.5);
  \draw (D |- {{(0,0)}}) node[below, red] {$c$} -- (0.75,1.1);
\end{tikzpicture}

\end{document}

引用手册中的话:

的意思(p-|q)是“通过 p 的垂直线与通过 q 的水平线的交点”。

在此处输入图片描述

答案2

您还可以调整解决方案提取 TikZ 中任意点的 x,y 坐标\ExtractCoordinate{D}在您需要该点的坐标之前调用并,然后在需要该值的地方使用\XCoord或。\YCoord

下面的代码产生的输出与 Gonzalo Medina 的答案相同。

代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

%% https://tex.stackexchange.com/questions/86897/recover-scaling-factor-in-tikz
\newcommand*\getscale[1]{%
  \begingroup
    \pgfgettransformentries{\scaleA}{\scaleB}{\scaleC}{\scaleD}{\whatevs}{\whatevs}%
    \pgfmathsetmacro{#1}{sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}%
    \expandafter
  \endgroup
  \expandafter\def\expandafter#1\expandafter{#1}%
}

\makeatletter
% https://tex.stackexchange.com/questions/33703/extract-x-y-coordinate-of-an-arbitrary-point-in-tikz
\newdimen\@XCoord
\newdimen\@YCoord
\newdimen\XCoord
\newdimen\YCoord
\newcommand*{\ExtractCoordinate}[1]{%
    \getscale{\@scalefactor}%
    \path [transform canvas] (#1); \pgfgetlastxy{\@XCoord}{\@YCoord};%
    \pgfmathsetlength{\XCoord}{\@XCoord/\@scalefactor}%
    \pgfmathsetlength{\YCoord}{\@YCoord/\@scalefactor}%
}
\makeatother


\begin{document}
\begin{tikzpicture}[scale=2]
   \coordinate (D) at (0.3,0.5);

  \ExtractCoordinate{D}
  \fill [red] (D) circle (1pt);
  \draw[gray] (\XCoord,0) node[below, red] {$c$} -- (0.75,1.1);
\end{tikzpicture}
\end{document}

答案3

为了完整性和将来的参考,如果您已经(a)定义了一个点,则可以定义一个(b)依赖于坐标的(a)新点let,如下所示:

\path let \p1 = (a) in coordinate (b) at (2*\x1,\y1/2);

由于\coordinate是的别名,如果您想使用来定义坐标,\path coordinate则必须使用上述代码。let

相关内容