
Hintergrund: Ich verstehe, dass TikZ basiert auf pgf. Beide sind im pgf-Handbuch beschrieben. Ich konnte jedoch den Abschnitt (falls er überhaupt existiert) im Handbuch nicht finden, der beschreibt, wie die beiden verbunden sind. Das ist ein Problem für mich, da ich die hochrangigen Konstrukte von Ti mag.kZ, dennoch fallen mir in pgf eine Reihe nützlicher Grundelemente auf, auf die ich nicht zugreifen kann.
Betrachten Sie als Beispiel dieses einfache Bild:
Es gibt zwei kurze, sich nicht schneidende Liniensegmente. Der Kreis markiert den Punkt, an dem sich die verlängerten Linien treffen. Die Liniensegmente und Knotenbeschriftungen wurden mit Ti erstellt.kZ, der Schnittpunkt mit pgf.
Hier ist der Code, der aus dem Handbuch übernommen und leicht angepasst wurde:
\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}
Offensichtlich ist der Code nicht DRY: Die Koordinaten werden im pgf-Abschnitt wiederholt. Aber wenn die Punkte A–D selbst das Ergebnis von Berechnungen wären, ist dies keine praktikable Option. Außerdem kann ichziehender Schnittpunkt, aber ich kann nichtverwendenes in weiteren Arbeiten an der TikZ-Ebene. Daher meine Fragen:
- Wie stelle ich die Punkte A–D in Begriffen dar,
\pgfpointintersectionoflines
die andere PGF-Konstrukte verwenden können?- Und wie extrahiere ich das Ergebnis aus der PGF-Welt, zur weiteren Verwendung im TikZ-Welt?
Beachten Sie, dass ich nach Antworten suche, die verallgemeinert werden können, und nicht nach einem Hack, der nur auf das vorliegende Problem anwendbar ist.
Antwort1
Zusätzlich zu dem, was Torbjørn T. sagt, können Sie vorhandene Knoten/Koordinaten mit verwenden \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}
Antwort2
Ich habe selbst eine andere Lösung gefunden. Sie ist nicht so schön wie die Antwort von Marmot, aber da es sich um einen anderen Ansatz für dasselbe Problem handelt und möglicherweise andere Optionen ermöglicht, biete ich sie hier zur Information an:
\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}
Auf dem Weg dorthin habe ich den Unterschied zwischen \pgfpoint
(Leinwandkoordinaten?) und \pgfpointxy
(Benutzerkoordinaten) gelernt.