Wie kann ich Segmente einer glatten Kurve durch einige Knoten beschriften?

Wie kann ich Segmente einer glatten Kurve durch einige Knoten beschriften?

Ich habe einige Knoten (von denen einige mithilfe der Schnittpunktbibliothek berechnet werden) und möchte eine glatte Kurve durch einige dieser Knoten zeichnen und die Kurve zwischen jedem Knotenpaar beschriften.

Der \draw plot[smooth] coordinates {...}Befehl zeichnet eine schöne, glatte Kurve. Wie kann ich die Segmente dieser Kurve beschriften?

Die einzige Problemumgehung, die mir eingefallen ist, besteht darin, die geraden Linien in Weiß zu zeichnen, sodass nur die Beschriftungen sichtbar sind. Ich bin jedoch sicher, dass es eine bessere Lösung gibt, da die Beschriftungspositionierung auf diese Weise im Verhältnis zur glatten Kurve stark variiert (z. B. ist Beschriftung 3 weit von der Kurve entfernt, während Beschriftung 4 sehr nah dran ist).

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\usetikzlibrary{positioning}

\begin{document}
\tikzstyle{vertex}=[circle,draw=black!30,fill=black!30,inner sep=1pt]
\begin{tikzpicture}[scale=2]

\node[vertex] (a) at (0,0) {};
\node[vertex] (b) at (2,-.3) {};
\node[vertex] (c) at (2.5, 1.3) {};
\node[vertex] (d) at (3.5, .6) {};
\node[vertex] (e) at (3, .2) {};

\draw (a) -- node[above,pos=.2] {1} (b) -- node[left] {2} (c) -- node[below left] {3} (d) -- node[below] {4} (e);
\draw[red] plot[smooth] coordinates {(a) (b) (c) (d) (e)};

\end{tikzpicture}
\end{document}

Mein Versuch

Antwort1

Die Dekoration könnt ihr gerne verwenden show path construction.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathreplacing}
\newcounter{smoothcounter}
\begin{document}
\begin{tikzpicture}[scale=2,
    vertex/.style={circle,draw=black!30,fill=black!30,inner sep=1pt},
    label smooth/.style={decorate,decoration={show path construction,
        curveto code={
\path (\tikzinputsegmentfirst) .. controls
(\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb) ..(\tikzinputsegmentlast) 
coordinate[pos=0.4] (aux1) coordinate[pos=0.6] (aux2)
(aux1) to[edge label={$\stepcounter{smoothcounter}\arabic{smoothcounter}$}] (aux2);
}}
}]
  \node[vertex] (a) at (0,0) {};
  \node[vertex] (b) at (2,-.3) {};
  \node[vertex] (c) at (2.5, 1.3) {};
  \node[vertex] (d) at (3.5, .6) {};
  \node[vertex] (e) at (3, .2) {};
  \draw (a) -- node[above,pos=.2] {1} (b) -- node[left] {2} (c) -- node[below left] {3} (d) -- node[below] {4} (e);
  \setcounter{smoothcounter}{0}
  \draw[red,postaction=label smooth] plot[smooth] coordinates {(a) (b) (c) (d) (e)};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Wenn Sie nicht zu sehr auf die Verwendung fixiert sind, plot[smooth]können Sie diehobbyTikZ-Bibliothek zum Verbinden der Koordinaten durch glatte Kurven. Dadurch werden Bézierkurven zwischen jedem Koordinatenpaar erstellt und es ist möglich, auf diese Pfade wie üblich Knoten zu setzen.

\documentclass{article}
%\url{https://tex.stackexchange.com/q/570505/86}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\usetikzlibrary{positioning}
\usetikzlibrary{hobby}

\begin{document}
\tikzstyle{vertex}=[circle,draw=black!30,fill=black!30,inner sep=1pt]
\begin{tikzpicture}[scale=2]

\node[vertex] (a) at (0,0) {};
\node[vertex] (b) at (2,-.3) {};
\node[vertex] (c) at (2.5, 1.3) {};
\node[vertex] (d) at (3.5, .6) {};
\node[vertex] (e) at (3, .2) {};

\draw[red,use Hobby shortcut,text=black] (a.center) .. node[auto] {\(1\)} (b.center) .. node[auto] {\(2\)} (c.center) .. node[auto] {\(3\)} (d.center) .. node[auto] {\(4\)} (e.center);



\end{tikzpicture}
\end{document}

Beschriftete glatte Kurve

verwandte Informationen