使用内联节点从两个不同方向从一个节点进行绘制

使用内联节点从两个不同方向从一个节点进行绘制

这个问题,我提供了一个代码来以外部节点作为参考,并得到了令人满意的答案。

使用这些答案从内联节点绘制我使用了以下代码:

\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node (oo){} node [xshift=0cm, yshift=0cm] {oo} (oo.center-|0,0) node [xshift=0cm, yshift=0cm] {y} -| (oo.center|-0,0) node [xshift=0cm, yshift=0cm] {x};
\end{tikzpicture}

要得到

在此处输入图片描述

当在此代码中省略命名起点节点时

    \draw [thick, violet, dotted] (4,3) node [xshift=0cm, yshift=0cm] {o} |- (0,0) node [xshift=0cm, yshift=0cm] {y} -| (0,0) node [xshift=0cm, yshift=0cm] {x};

我有

在此处输入图片描述

如何修复此问题?

这是我使用的完整代码:

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}


\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node (oo){} node [xshift=0cm, yshift=0cm] {oo} (oo.center-|0,0) node [xshift=0cm, yshift=0cm] {y} -| (oo.center|-0,0) node [xshift=0cm, yshift=0cm] {x};
\end{tikzpicture}
\end{frame}

\begin{frame}[fragile,t]
\frametitle{}
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node [xshift=0cm, yshift=0cm] {o} |- (0,0) node [xshift=0cm, yshift=0cm] {y} -| (0,0) node [xshift=0cm, yshift=0cm] {x};
\end{tikzpicture}
\end{document}

答案1

在您的代码中:

\draw[thick,violet,dotted](4,3)node[xshift=0cm, yshift=0cm]{o}|-(0,0) node[xshift=0cm, yshift=0cm]{y}-|(0,0)node[xshift=0cm, yshift=0cm]{x}

不带节点时等效于:

\draw[draw_styles]
(4.3) %Initial path coordinate
    -|(0,0) % (4.3) Linked to (0,0) using cornered link (-|)
    -|(0,0); % (0.0) Linked to (0,0)

在之前的代码中你:

\draw(4,3)node (oo){} node [xshift=0cm, yshift=0cm] {oo} (oo.center-|0,0) node [xshift=0cm, yshift=0cm] {y} -| (oo.center|-0,0) node [xshift=0cm, yshift=0cm] {x};

其无节点等效代码为:

\draw[draw_styles]
(4.3) %Initial path coordinate <nothing is drawn, but you use to put a text named node>
(4.3 -| 0,0) % That gives a new coordinate (4,0) <4.3 is the equivalent of node_name.center.>
        -|(0,0 |- 4.3); % (4,0) Linked to (0,3) using cornered link (-|)

(A-|B)这两段代码都没有从 (4.3) 点绘制相应的线;可以做到这一点的代码是使用边和坐标,以便在使用或(A|-B)计算交点时不重写坐标。

初始坐标有一个带有文本的文本节点{o},但还有一个label位于45度位置的,然后将坐标分配给P常量符号,然后绘制两个边到点(P -| 0,0)(P |- 0,0);将文本节点按边放置在线中的代码写在边和坐标之间;但必须指定从0到1的位置,即线的极限,就像文本节点可以包含标签一样。

结果:

在此处输入图片描述

梅威瑟:

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
    \begin{tikzpicture}[
        font=\sffamily,
        >={Stealth[inset=0pt,length=6pt]},
        ]
    \draw [thick,->](0,0) -- (5,0);
    \draw [thick,->](0,0) -- (0,4.);
    %Option using edge
    \draw [thick, violet, dotted] (4,3) node[label=45:o,inner sep=-3pt]{o} coordinate (P)
        edge  node[pos=1,label=180:y,inner sep=-3pt]{y} (P -| 0,0) 
        edge node[pos=1,label=-90:x,inner sep=-3pt]{x}  (P |- 0,0) ;
    \end{tikzpicture}
\end{document}

答案2

我建议使用两个绘制命令,而不是一个,并且命令\currentcoordinate来自这个答案

\documentclass{standalone}
\usepackage{tikz}
% Taken from https://tex.stackexchange.com/a/132926/110998
\makeatletter
\newcommand\currentcoordinate{\the\tikz@lastxsaved,\the\tikz@lastysaved}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node {o} -- (\currentcoordinate-|0,0) node {y};
\draw [thick, violet, dotted] (4,3) -- (\currentcoordinate|-0,0) node {x};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

calc通过使用该库并结合命令即可实现您想要的效果let

您可以在路径定义中的某处使用let \p1 = (<coordinate>) in,让其与\p1路径定义中任何地方的坐标相对应。此外,您还可以将xy坐标用作\x1和,\y1这样就不需要和符号-||-

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\begin{frame}[t]
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, orange,dotted] let \p1 = (4,3) in {
    (\p1) -- node[above]{x} (0,\y1) 
    (\p1) -- node[right]{y} (\x1,0)
    (\p1) node[above right]{oo}};
\end{tikzpicture}
\end{frame}
\end{document}

结果:

在此处输入图片描述

下面的例子表明,仅通过改变 的坐标就可以起作用\p1

\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\foreach \t in {0,10,...,359}{
\begin{frame}[t]
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, orange,dotted] let \p1 = ({3+cos(\t)},{2+sin(\t)}) in {
    (\p1) -- node[above]{x} (0,\y1) 
    (\p1) -- node[right]{y} (\x1,0)
    (\p1) node[above right]{oo}};
\end{tikzpicture}
\end{frame}
}
\end{document}

其结果是

在此处输入图片描述

最后我想说的是,对于这个简单的情况,这个let命令可能有点过度,但我猜不出你会用它做什么。

相关内容