Hallo zusammen,

ich habe mit tikz die folgende Zeichnung erstellt:

Open in Online-Editor
\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{arrows.meta}

\begin{document}
\tikzset{->-/.style={decoration={
  markings,
  mark=at position #1 with {\arrow{>[length=5pt,width=8pt]}}},postaction={decorate}}}
\begin{figure}[h!]
\centering
\begin{tikzpicture}
%Achsen zeichnen, Achtung: y-Achse verschoben!
\draw[->] (-2,0) -- (4,0) node[right]{$x$};
\draw[->] (-1,-1) -- (-1,4) node[above]{$y$};
%Lösungsbahn zeichnen
\draw[out=0,in=-70] (2,0) to (3,1);
\draw[->-=0.5,out=110, in=50] (3,1) to (1,3);
\draw[out=-130, in=110] (1,3) to (0.5,1.5);
\draw[out=-70,in=70] (0.5,1.5) to (0.75,0.75);
\draw[out=-120,in=180] (0.75,0.75) to (2,0);
\draw[fill] (2,0) circle(1pt) node[below]{$\gamma(0)$};
%Punkte einzeichnen
\draw[fill] (0.5,1.5) circle(1pt) node[left]{$\gamma(t)$};
\draw[fill] (3,1) circle(1pt) node[right]{$\gamma(s)$};
%Verbindungslinie
\draw[dashed] (3,1) -- (0.5,1.5);
\draw[->,thick] (3,1) -- +(-0.981,0.196);

\end{tikzpicture}
\caption{$-u(x_0)$ graphisch begründet}
%\label{fig:Winkel zwischen g und x-Achse}
\end{figure}

\end{document}

Die Kurve ist willkürlich ausgedacht, d.h. die Kurve bzw. die Punkte können bei Bedarf abgeändert werden, was ich aber gerne vermeiden würde, da ich in weiteren Zeichnungen diese Kurve schon verwendet habe und diese ungerne abändern und überarbeiten würde. Mathematisch soll es ein einfach geschlossener, glatter Weg sein der sich im ersten Quadranten befindet und die x-Achse an einem Punkt tangiert.

Die Punkte für die Verbindungslinie sind aus reiner Bequemlichkeit als Anschlusspunkte der Kurve gewählt, danach normiere ich (händisch berechnet) den Vektor der zwischen diesen beiden Punkten entstehen würde. Soweit zur aktuellen Fassung. Ich würde nun gerne die Punkte auf der Kurve links und rechts näher an den Punkt auf der x-Achse verschieben. Das habe ich mit Augenmaß soweit hinbekommen und zwei ungefähre Punkte einfach soweit jeweils verschoben bis es passend aussah.

Open in Online-Editor
\documentclass[a4paper]{article}

    \usepackage[english]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage{tikz}
    \usetikzlibrary{arrows}
    \usetikzlibrary{decorations.markings}
    \usetikzlibrary{arrows.meta}

    \begin{document}
    \tikzset{->-/.style={decoration={
      markings,
      mark=at position #1 with {\arrow{>[length=5pt,width=8pt]}}},postaction={decorate}}}
    \begin{figure}[h!]
    \centering
    \begin{tikzpicture}
    %Achsen zeichnen, Achtung: y-Achse verschoben!
    \draw[->] (-2,0) -- (4,0) node[right]{$x$};
    \draw[->] (-1,-1) -- (-1,4) node[above]{$y$};
    %Lösungsbahn zeichnen
    \draw[out=0,in=-70] (2,0) to (3,1);
    \draw[->-=0.5,out=110, in=50] (3,1) to (1,3);
    \draw[out=-130, in=110] (1,3) to (0.5,1.5);
    \draw[out=-70,in=70] (0.5,1.5) to (0.75,0.75);
    \draw[out=-120,in=180] (0.75,0.75) to (2,0);
    \draw[fill] (2,0) circle(1pt) node[below]{$\gamma(0)$};
    %Punkte einzeichnen
    \draw[fill] (1.65,0.05) circle(1pt) node[left]{$\gamma(t)$};
    \draw[fill] (2.4,0.1) circle(1pt) node[right]{$\gamma(s)$};
    %Verbindungslinie
    \draw (2.4,0.1) -- (1.65,0.05);

    \end{tikzpicture}
    \caption{$-u(x_0)$ graphisch begründet}
    %\label{fig:Winkel zwischen g und x-Achse}
    \end{figure}

    \end{document}

Ich frage mich jetzt, ob das nicht auch genauer geht, d.h. ob man einen Punkt auf dem gezeichneten Kurvenstück draw[out=0,in=-70] (2,0) to (3,1); direkt ansteuern kann, um die Verbindungslinie einzuzeichnen. Falls das möglich ist, lässt sich auch direkt der normierte Vektor damit bestimmen ohne das händisch zu berechnen?

Ich hoffe mein Problem bzw. Anliegen ist verständlich, ansonsten versuche ich das noch genauer auszuführen!

gefragt 10 Jun '15, 14:36

Hirshy's gravatar image

Hirshy
73133745
Akzeptiert-Rate: 0%

bearbeitet 07 Feb '16, 12:03

saputello's gravatar image

saputello
11.1k174365


Du kannst die intersections Bibliothek laden. Dann kannst Du Dir zwei beliebige Punkte etwas außerhalb der Kurve suchen und diese - ohne sie zu zeichnen - verbinden und die Verbindung benennen. Wenn Du auch der Kurve einen Namen gibst, kannst Du die Schnittpunkte ermitteln lassen, die dann definitiv auf der Kurve liegen. Ich habe dazu Deine Kurve in einem Zug gezeichnet, aber Du kannst auch für zwei einzelne Kurvenstücken machen.

Wenn Du dann noch einen Pfeil von 1cm Länge von dem einen Punkt zum anderen zeichnen möchtest, dann brauchst Du noch die calc Bibliothek und kannst dann einen "Distance Modifier" verwenden. Näheres dazu findest Du in der Doku von pgf/TikZ.

Open in Online-Editor
\documentclass[margin=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{intersections}
\usetikzlibrary{calc}

\begin{document}
\tikzset{
  ->-/.style={decoration={
    markings,
    mark=at position #1 with {\arrow{>[length=5pt,width=8pt]}}},postaction={decorate}},
  punkt/.style={circle,fill,inner sep=1pt}
}
\begin{tikzpicture}
%Achsen zeichnen, Achtung: y-Achse verschoben!
\draw[->] (-2,0) -- (4,0) node[right]{$x$};
\draw[->] (-1,-1) -- (-1,4) node[above]{$y$};
%Lösungsbahn zeichnen
\draw[name path=kurve] (2,0) 
  to [out=0,in=-70] (3,1)
  to [out=110, in=50] (1,3)
  to [out=-130, in=110](0.5,1.5)
  to [out=-70,in=70] (0.75,0.75)
  to [out=-120,in=180] (2,0) node[punkt,label=below:$\gamma(0)$]{}
;
%Markierung einzeichnen
\path[->-=0.5,out=110, in=50] (3,1) to (1,3);
%Gerade auf der die Punkte liegen
\path[name path=gerade,overlay](1,0.05)--(3,0.2);

\draw[dashed,name intersections={of=kurve and gerade,sort by=gerade}]
  (intersection-1) node[punkt,label={[xshift=-2mm]below:$\gamma(t)$}](gammat){}
  --(intersection-2) node[punkt,label={[xshift=2mm]below:$\gamma(s)$}](gammas){}
;
\draw[->](gammas)--($(gammas)!1cm!(gammat)$);
\end{tikzpicture}
\end{document}

alt text

Permanenter link

beantwortet 10 Jun '15, 16:33

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

Also wieder die intersections bzw. calc-library...ich werde mich damit wohl doch demnächst näher befassen müssen. Danke!

(12 Jun '15, 00:05) Hirshy
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×35
×8
×6
×3

gestellte Frage: 10 Jun '15, 14:36

Frage wurde gesehen: 9,887 Mal

zuletzt geändert: 07 Feb '16, 12:03