Проведите вертикальную линию от узла до пересечения с горизонтальной линией.

Проведите вертикальную линию от узла до пересечения с горизонтальной линией.

пожалуйста, рассмотрите этот код

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

\begin{document}
    \begin{tikzpicture}[node distance=-\pgflinewidth]   
        \node[fill=black] (a) {};
        \node[fill=black, xshift=\linewidth] (c) {};
        \node[xshift=\linewidth*0.7] (b) {...};

        \draw [name path=line1] (a) -- (b);
        \draw (b) -- (c);

        \node[draw, rectangle, above=of a, yshift=0.5cm, xshift=1cm] (foo1) {Foo 1};
        \node[draw, rectangle, right=0.5cm of foo1] (foo2) {Foo 2};

        \draw (foo1) -- TODO;
        \draw (foo2) -- TODO;
    \end{tikzpicture}

\end{document}

Мне не удаётся провести прямую вертикальную линию от узлов foo1 и foo2 вниз к path line1. Я не хочу указывать абсолютные координаты. Я пытался решить эту проблему с помощью пересечений, но поскольку моя начальная позиция — узел, это, похоже, не работает. Есть предложения?

решение1

Так?

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

\begin{document}
    \begin{tikzpicture}[node distance=-\pgflinewidth]   
        \node[fill=black] (a) {};
        \node[fill=black, xshift=\linewidth] (c) {};
        \node[xshift=\linewidth*0.7] (b) {...};

        \draw [name path=line1] (a) -- (b);
        \draw (b) -- (c);

      \node[draw, rectangle, above=of a, yshift=0.5cm, xshift=1cm] (foo1) {Foo 1};
        \node[draw, rectangle, right=0.5cm of foo1] (foo2) {Foo 2};

\path[name path=fl1] (foo1.270)coordinate(f1)--++(-90:2);
\path[name path=fl2] (foo2.270)coordinate(f2)--++(-90:2);
\path[name intersections={of=fl1 and line1,by={a}}];
\path[name intersections={of=fl2 and line1,by={b}}];
\draw (f1)--(a);
\draw (f2)--(b);

%        \draw (foo1) -- TODO;
   %     \draw (foo2) -- TODO;
    \end{tikzpicture}

\end{document}

введите описание изображения здесь

решение2

TikZ позволяет вам найти точку, расположенную на пересечении горизонтальной линии, проходящей через aи вертикальную foo1линию, которую вы ищете, — это синтаксис (foo1|-a)или и то, и другое с помощью синтаксиса (a-|foo1).

Цитирую руководство TikZ 3.1.4

В общем, значение (p |- q)- этопересечение вертикальной линии, проходящей через pи горизонтальной линии, проходящей черезq.

Скриншот

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

\begin{document}
    \begin{tikzpicture}[node distance=-\pgflinewidth]   
        \node[fill=black] (a) {};
        \node[fill=black, xshift=\linewidth] (c) {};
        \node[xshift=\linewidth*0.7] (b) {...};

        \draw [name path=line1] (a) -- (b);
        \draw (b) -- (c);

        \node[draw, rectangle, above=of a, yshift=0.5cm, xshift=1cm] (foo1) {Foo 1};
        \node[draw, rectangle, right=0.5cm of foo1] (foo2) {Foo 2};

        \draw (foo1) -- (a-|foo1);
        \draw (foo2) -- (a-|foo2);
    \end{tikzpicture}
\end{document}

Связанный контент