Ich versuche, über die Kommandos \pgfmathanglebetweenlines den Winkel zwischen zwei Linien zu berechnen und diesen mit \pgfmathsetmacro für die spätere Verwendung zu speichern.

Open in Online-Editor
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{frame}
  \begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (7,1);
    \coordinate (C) at (1.5,5);
    \pgfmathsetmacro{\angA}{\pgfmathanglebetweenlines{(A)}{(B)}{(A)}{(C)}};
    \pgfmathsetmacro{\angA2}{0.25*\pgfmathanglebetweenlines{(A)}{(B)}{(A)}{(C)}};
  \end{tikzpicture}
\end{frame}
\end{document}

Das Beispiel führt zur Fehlermeldung

Undefined control sequence. end{frame}

Update: Obiges Beispiel enthält einen Fehler. Hier das geänderte Beispiel.

Open in Online-Editor
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{frame}
  \begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (7,1);
    \coordinate (C) at (1.5,5);
    % Berechnung mit Koordinaten
    \pgfmathanglebetweenlines{(A)}{(B)}{(A)}{(C)}
    \pgfmathsetmacro{\angA}{\pgfmathresult};
    % Berechnung mit \pgfpoint
    \pgfmathanglebetweenlines{\pgfpoint{0cm}{0cm}}{\pgfpoint{7cm}{1cm}}{\pgfpoint{0cm}{0cm}}{\pgfpoint{1.5cm}{5cm}}
    \pgfmathsetmacro{\angB}{\pgfmathresult};
    \node {angA=\angA\quad angB=\angB};
  \end{tikzpicture}
\end{frame}
\end{document}

Dieses Beispiel läuft nun ohne Fehler, aber liefert für den Winkel 0.0 zurück. Dies liegt daran, dass \pgfmathanglebetweenlines als Punkte keine Koordinaten verträgt sondern \pgfpoint benötigt. Kann man Koordinaten in \pgfpoint umwandeln?

gefragt 21 Feb '16, 15:07

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%

bearbeitet 21 Feb '16, 18:35

Der frame ist keine echte Umgebung, sondern das Makro \frame{...} (mehr auf TeX.SX). Daher kann man im Argument kein anderes Makro definieren. Entweder \begin{frame}[fragile] oder \pgfmathsetmacro außerhalb des Frames.

(21 Feb '16, 18:01) Henri

@Henri Ich denke nicht, dass es an fragile liegt. Ich hab einen Fehler gefunden und die Frage oben erweitert.

(21 Feb '16, 18:14) tom75
2

@tom75 \path (A); \pgfgetlastxy{<macro for x>}{<macro for y>}.

(21 Feb '16, 18:41) Henri

@Henri Danke, das klappt!

(21 Feb '16, 19:06) tom75

Basierend auf dem Vorschlag von Henri:

Open in Online-Editor
\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{frame}
  \begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (7,1);
    \coordinate (C) at (1.5,5);
    \path (A);
    \pgfgetlastxy{\xA}{\yA}
    \path (B);
    \pgfgetlastxy{\xB}{\yB}
    \path (C);
    \pgfgetlastxy{\xC}{\yC}
    \pgfmathanglebetweenlines{\pgfpoint{\xA}{\yA}}{\pgfpoint{\xB}{\yB}}{\pgfpoint{\xA}{\yA}}{\pgfpoint{\xC}{\yC}}
    \pgfmathsetmacro{\angB}{\pgfmathresult};
    \node {angB=\angB};
  \end{tikzpicture}
\end{frame}
\end{document}
Permanenter link

beantwortet 21 Feb '16, 22:22

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%

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
×27

gestellte Frage: 21 Feb '16, 15:07

Frage wurde gesehen: 8,665 Mal

zuletzt geändert: 21 Feb '16, 22:22