TikZ:从编码点访问坐标

TikZ:从编码点访问坐标

考虑下面的代码。在scope环境中,我使用剪辑将椭圆保持在点之间。通过阅读,我知道使用命令,let我可以通过在 let 命令中定义点来访问点的坐标\p2 = (P2)。我可以访问剪辑中使用的坐标吗?

目标是,如果我改变P2,剪辑也会改变。

  \documentclass[tikz, border=5mm]{standalone}
  \usetikzlibrary{arrows,calc, decorations.markings, intersections}

  \begin{document}

  \begin{tikzpicture}[
    dot/.style = {outer sep = +0pt, inner sep = +0pt, shape = circle, draw = black, label = {#1}},
    small dot/.style = {minimum size = 1pt, dot = {#1}},
    big dot/.style = {minimum size = 2pt, dot = {#1}},
    line join = round, line cap = round, >=triangle 45
    ]
    \node[ fill = black, big dot = {below: \(F\)}] (F) at (0, 0) {};
    \node[ fill = black, big dot = {below: \(P_1\)}] (P1)  at (2, 0) {};
    \node[ fill = black, big dot = {above right=.25cm:\(P_2\)}] (P2) at (-2, 2) {};    

    \begin{pgfinterruptboundingbox}                  
    \begin{scope}[decoration = {markings,
        mark = at position 0.5 with {\arrow{>}}
      }]
      \clip (2, 0) -- (-2, 0) -- (-2, 2.2) -- (2, 2.2) -- cycle;
      \draw[name path global = ellp, postaction = decorate] let
        \p0 = ($(P2) - (F)$),
        \p1 = ($(P1) - (P2)$)
      in (P2|-P1) ++ (\x1, 0) arc (0:100: \x1 and \y0);                                         
  \end{scope}
\end{pgfinterruptboundingbox}

\path[name path = aux1] (P2) circle [radius = 1bp];
\draw[name intersections = {of = ellp and aux1}, -latex] (P2) --
($(intersection-2)!.75cm!(intersection-1)$);
\draw [-latex] (P2) --
($(P2)!0.75cm!-90:($(intersection-2)!.75cm!(intersection-1)$)$);


  \end{tikzpicture}
  \end{document} 

答案1

直接回答你的问题:是的,您可以将let..in语法用作命令的一部分\clip。例如:

\clip let \p1=(P2) in (\x1,\y1) rectangle (P1);

这将允许您对单独的 x 和 y 坐标进行一些算术运算,但是有一个缺点:您需要指定添加或减去的常数的单位,例如:

\clip let \p1=(P2) in (\x1 + 0.5cm, \y1) rectangle (P1);

如果您不指定单位,tikz 将使用pt默认值。由于点非常小,因此仅使用 不会看到任何变化\x1+0.5

指定单位并不是最佳选择,因为这会使图形不易缩放。例如,如果您给出选项x=5mm,则所有无量纲坐标都会减半,但常量0.5cm不会。

A更好的解决方案是使用计算表达式,例如:

\clip ($(P2)+(0.5, 0)$) rectangle (P1);

这不仅语法更清晰,而且无需指定常量的尺寸(0.5, 0),因此图像很容易缩放。请注意,使用这类表达式\usetikzlibrary{calc}是必需的(但你无论如何都有)。

相关内容