pgfmathanglebetweenlines 초보자 질문 사용

pgfmathanglebetweenlines 초보자 질문 사용

이제 막 tikz를 사용하기 시작했고 을 사용하고 싶지만 \pgfmathanglebetweenlines확실히 이해가 되지 않습니다. 다음 코드가 매개변수의 각도를 보고할 것으로 예상했지만 매번 0o로 표시됩니다(때로는 매번\try 45o 또는 매번 90o) . 내가 뭘 잘못했나요?

%
% 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}   

답변1

여기에는 몇 가지 문제가 있습니다. 첫째, \pgfmathanglebetweenlines기본 레이어 좌표 지정이 필요합니다(예: 이 경우 \pgfpointanchor{Y}{center}). 두 번째는 \pgfmathresult수학 엔진을 사용할 때마다 재정의되므로 조판할 때 각도 측정값이 손실됩니다.

해결책은 아래와 같습니다. 참고 또한 예각에 대한 수정 사항을 추가했으며(문서가 \pgfmathanglebetweenlines정확하지 않은 것 같습니다) 각도를 가장 가까운 정수로 반올림했습니다.

\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}  

하지만! 기본 레이어 항목은 필요하지 않습니다. 라이브러리 calc는 필요한 모든 것을 제공합니다:

\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} 

여기에 이미지 설명을 입력하세요

관련 정보