TikZ -- Gerade (nicht Strecke) durch zwei Punkte.

Tabellen und Grafiken erstellen und anordnen


michl1211
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: So 17. Jan 2010, 17:23

TikZ -- Gerade (nicht Strecke) durch zwei Punkte.

Beitrag von michl1211 »

Hallo,

ich würde gerne eine Gerade durch zwei Punkte zeichnen. Theoretisch könnte ich dies tun mit
\tikz \draw plot[domain=0:7] (\x,{Steigung*\x+Verschiebung});
Dies hat aber den Nachteil, daß ich zunächst (von Hand) Steigung und Verschiebung der Gerade, die durch die gegebenen Punkte verläuft berechnen muss.

Ich will aber folgendes. Ich möchte zwei Punkte Vorgeben und und dann TikZ vermitteln: Zeichne die Gerade durch die gegebenen Punkte mit x-Koordinaten Abschnitt 0 bis 7 (also sowas wie domain=0:7)
\begin{tikzpicture}[scale=1.40]
%% --- Koordinatendefinition: 
  \coordinate (a) at (0.50,2.119);
  \coordinate (b) at (3.25,3.277);

  \draw (a) -- (b);  % Die Linie soll die Punkte a und b "durchqueren"
                     % und zwar vom x-Achsenabschnitt Null bis Sieben

\end{tikzpicture}

Gruß
System: TeX Live 2012, ArchLinux 3.2.9-1; Editor: Vim, Kile

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Hallo,

hier ist ein Vorschlag bei dem pgf für dich rechnet:
\documentclass{scrartcl}
\usepackage{tikz}

\newcommand\ZeichneGerade[6]{%
  \coordinate (Punkt1) at (#1,#2); 
  \coordinate (Punkt2) at (#3,#4);
  \pgfmathsetmacro\m{(#4-#2)/(#3-#1)}%
  \pgfmathsetmacro\n{#2-\m*#1}%
  \draw plot[domain=#5:#6] (\x,{\m*\x+\n});
}
%Syntax: \ZeichneGerade{x1}{y1}{x2}{y2}{anfang plotbereich}{ende plotbereich}

\begin{document}

\begin{tikzpicture}
  \draw[lightgray](0,0)grid (7,6);
  \ZeichneGerade{0.5}{2.119}{3.25}{3.277}{0}{7}
  \draw[red,very thick](Punkt1)--(Punkt2);
  \ZeichneGerade{2}{2}{3.5}{3}{0}{7}
  \draw[green,very thick](Punkt1)--(Punkt2);
\end{tikzpicture}

\end{document}
Gruß
Elke

michl1211
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: So 17. Jan 2010, 17:23

Beitrag von michl1211 »

Hallo,

wow! Vielen vielen Lieben Dank! - ich habe noch eine Frage. Durch den hier gegebenen Punkt (a) möchte ich eine Tangente zeichnen - auch diese will ich skalieren in dem ich den Definitionsbereich angebe (also wie eben bei der Sekante) - und auch hier würde ich gerne ohne Rechnen auskommen. Ich habe im pgf-Manual zwar das Beispiel mit der Tangente an den Kreis gesehen, mir war es aber etwas zu kurz gefasst, also das ich es selbständig auf diese Funktion übertragen könnte.
\begin{tikzpicture}[scale=1.40]
%% --- Koordinatendefinition: 
  \coordinate (a) at (0.50,2.119);


%% --- Achsen und Hilfslinien:
  \draw[-stealth] (-.10,0.00) -- (10.4,0.00) node[right] {$x$};           % x-Achse
  \draw[-stealth] (0.00,-.10) -- (0.00,5.00) node[above] {$f(x)$};        % y-Achse  

  \draw[help lines] (a) -- (A)           node[below,black] {$a$};
  \draw[help lines] (a) -- (-0.08,2.119) node[left,black]  {$f(a)$}; 


%% --- Funktion, Tangente:
  \draw[line width = 0.8pt] plot[domain=0:10, samples=200] (\x,{2*sin(0.63*\x r) + 1.5});
  \fill[black, opacity=.8]        (a) circle (1.75pt);
\end{tikzpicture}

Gruß
System: TeX Live 2012, ArchLinux 3.2.9-1; Editor: Vim, Kile

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Hallo,

wenn ich nichts übersehen habe, dann ist das Beispiel auch nicht auf deinen Wunsch übertragbar. Dort wird lediglich von einem bestimmten Punkt ausgehend eine Tangente an eine Node gezeichnet, die auch noch kreisförmig sein muss. Du willst ja aber eine Tangente an einen vorgegebenen Punkt einer Funktion zeichnen.
Deshalb musst du die Ableitung schon selbst bestimmen, was in dem Fall ja nicht schwierig ist.

Hier ein Vorschlag bei bekannter Ableitungsfunktion:
\documentclass{scrartcl}
\usepackage{tikz}

\newcommand\Tangente[6][]{%
  \pgfmathsetmacro\Px{#2};
  \pgfmathsetmacro\Py{#3};
  \coordinate(Punkt)at(\Px,\Py);
  \pgfmathsetmacro\n{\Py-#4*\Px}
  \draw[#1] plot[domain=#5:#6] (\x,{#4*\x+\n});
}
% Syntax:
% \Tangente[optionen für plot, z.B. farbe]{x koordinate von P}{y koordinate von P}{anstieg in P}{anfang plotbereich}{ende plotbereich}
% für die y Koordinate und den Anstieg kann auch eine Formel angegeben werden,
% wenn auf die zugehörige x Koordinate zugegriffen werden soll, muss für diese \Px eingesetzt werden

\begin{document}

\begin{tikzpicture}

%% --- Achsen und Hilfslinien: 
  \draw[-stealth] (-.10,0.00) -- (10.4,0.00) node[right] {$x$};           % x-Achse 
  \draw[-stealth] (0.00,-.10) -- (0.00,5.00) node[above] {$f(x)$};        % y-Achse   

%% --- Funktion
  \draw[line width = 0.8pt] plot[domain=0:10, samples=200] (\x,{2*sin(0.63*\x r) + 1.5});
%% --- Tangente für x=0.5
  \Tangente[green]{0.5}{2*sin(0.63*\Px r) + 1.5}{1.26*cos(0.63*\Px r)}{0}{5}
  \draw[help lines] (Punkt) -- (Punkt|-0,-0.08) node[below,black] {$a$}; 
  \draw[help lines] (Punkt) -- (Punkt-|-0.08,0) node[left,black]  {$f(a)$};
  \fill[black, opacity=.8](Punkt) circle (1.75pt);
%% --- Tangente für x=1.5
  \Tangente[orange,dashed]{1.5}{2*sin(0.63*\Px r) + 1.5}{1.26*cos(0.63*\Px r)}{0}{5}
  \draw[help lines] (Punkt) -- (Punkt|-0,-0.08) node[below,black] {$b$}; 
  \draw[help lines] (Punkt) -- (Punkt-|-0.08,0) node[left,black]  {$f(b)$};
  \fill[black, opacity=.8](Punkt) circle (1.75pt);
\end{tikzpicture} 

\end{document}
Gruß
Elke

michl1211
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: So 17. Jan 2010, 17:23

Beitrag von michl1211 »

Hallo,

vielen Dank erstmal das sind wirklich schöne Makros, die Du mir da gebaut hast, mit denen sich prima arbeiten lässt. Erklärst Du mir bitte nich, was der Befehl \pgfmathsetmacro macht? Vielleicht schaffe ich es dann den nächsten Befehl selbst zu bauen. ;)

Gruß
System: TeX Live 2012, ArchLinux 3.2.9-1; Editor: Vim, Kile

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Hallo,

der Befehl ist neben vielen anderen in der Doku erklärt. Schau mal unter VI Mathematical and Oject-Oriented Engines nach.

\pgfmathsetmacro{<macro>}{<mathematischer ausdruck>} definiert <macro> als Wert des <mathematischen ausdrucks>.

Gruß
Elke

Antworten