Ich habe gerade angefangen, Tikz zu verwenden, und möchte es verwenden \pgfmathanglebetweenlines
, aber ich verstehe es offensichtlich nicht. Ich habe erwartet, dass der folgende Code den Winkel in den \try
Parametern meldet, aber er kommt jedes Mal als 0 o heraus (oder manchmal jedes Mal 45 o oder jedes Mal 90 o ). Was habe ich falsch gemacht?
%
% preamble
%
\documentclass[10pt]{article}
\usepackage{amssymb,amsmath}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
%
% drawing.
%
\begin{document}
\def\try#1{
\begin{tikzpicture}[scale=4]
\coordinate[label=below:$O$](O)at(0,0);
\coordinate[label=$X$](X)at(1,0);
\coordinate[label=$Y$](Y)at({cos(#1)},{sin(#1)});
\draw(Y)--(O)--(X);
\pgfmathanglebetweenlines{(O)}{(Y)}{(O)}{(X)}
\coordinate[label=right:{$\angle YOX=\pgfmathresult^\circ$}](label)at(X);
\end{tikzpicture}
\\}
\try{20}\try{45}\try{60}\try{180}\try{405}\try{-45}
\end{document}
Antwort1
Hier gibt es ein paar Probleme. Erstens \pgfmathanglebetweenlines
erfordert es grundlegende Layer-Koordinatenspezifikationen (z. B. in diesem Fall \pgfpointanchor{Y}{center}
). Zweitens \pgfmathresult
wird es jedes Mal neu definiert, wenn die mathematische Engine verwendet wird, sodass die Winkelmessung beim Setzen verloren geht.
Unten sehen Sie eine Lösung. Beachten Sie, dass ich auch eine Korrektur für spitze Winkel hinzugefügt habe (ich glaube, die Dokumentation dazu \pgfmathanglebetweenlines
ist nicht ganz richtig) und um den Winkel auf die nächste Ganzzahl zu runden.
\documentclass[varwidth,border=5]{standalone}
\usepackage{tikz}
\def\try#1{%
\begin{tikzpicture}[scale=4]
\coordinate[label=below:$O$] (O) at (0,0);
\coordinate[label=$X$] (X) at (1,0);
\coordinate[label=$Y$] (Y) at (cos #1, sin #1);
\draw (Y) -- (O) -- (X);
\pgfmathanglebetweenlines%
{\pgfpointanchor{O}{center}}{\pgfpointanchor{Y}{center}}
{\pgfpointanchor{O}{center}}{\pgfpointanchor{X}{center}}
\pgfmathparse{int(round(min(\pgfmathresult, 360-\pgfmathresult))}% Correction
\let\angleyox=\pgfmathresult
\coordinate [label=right:{$\angle YOX=\angleyox^\circ$}] (label) at (X);
\end{tikzpicture}
\\}
\begin{document}
\foreach \a in {20, 45, 60, 180, 405,-45}{\try{\a}}
\end{document}
Aber! Die grundlegenden Layer-Sachen sind nicht notwendig. Die calc
Bibliothek bietet alles, was Sie brauchen:
\documentclass[varwidth,border=5]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\def\try#1{%
\begin{tikzpicture}[scale=4]
\coordinate[label=below:$O$] (O) at (0,0);
\coordinate[label=$X$] (X) at (1,0);
\coordinate[label=$Y$] (Y) at (cos #1, sin #1);
\draw (Y) -- (O) -- (X);
\path let \p1=(O),\p2=(Y),\p3=(X),
\n1={atan2(\y2-\y1,\x2-\x1)},
\n2={atan2(\y3-\y1,\x3-\x1)} in
node at (X) [right] {\pgfmathparse{int(abs(\n2-\n1))}% Correction
$\angle YOX=\pgfmathresult^\circ$};
\end{tikzpicture}
\\}
\begin{document}
\foreach \a in {20, 45, 60, 180, 405,-45}{\try{\a}}
\end{document}