在 `TikZ` 中使用 `to[out=*,in=**]` 的不美观的箭头

在 `TikZ` 中使用 `to[out=*,in=**]` 的不美观的箭头

我手上的图几乎就是我想要的。最不吸引人的部分是从 $180^{\circ}-\theta$ 开始的箭头。

\documentclass{amsart}
\usepackage{amsmath}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\begin{document}


\begin{tikzpicture}

%AT is a chord of a circle, and B is a point on the circle distinct from A and T. \ell is a
%tangent line to the circle at T. \angle{ABT} and one of the angles between AT and \ell are
%supplementary angles.

\coordinate (O) at (0,0);
\draw[fill] (O) circle (1.5pt);
\draw (0,0) circle (1.5);

\path (230:1.5) coordinate (A) (110:1.5) coordinate (B) (325:1.5) coordinate (B') (20:1.5) coordinate (T);
\draw[fill] (T) circle (1.5pt);
\path let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(A)-(T)$), \n2={atan(\y2/\x2)} in node[anchor={0.5*(\n1+\n2)}, inner sep=0, font=\footnotesize] at ($(A) +({0.5*(\n1+\n2)+180}:0.15)$){\textit{A}};
\path let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(B)-(T)$), \n2={atan(\y2/\x2)} in node[anchor={0.5*((\n1-180)+\n2)}, inner sep=0, font=\footnotesize] at ($(B) +({0.5*((\n1-180)+\n2)+180}:0.15)$){\textit{B}};
\node[anchor=200, inner sep=0, font=\footnotesize] at ($(T) +(20:0.15)$){\textit{T}};


%Line \ell is drawn. T is to be the midpoint of the drawn line.
\path[name path=line_ell] ($(T) +(110:1.25)$) -- ($(T) +(-70:1)$);
\path[name path=right_arrowhead_of_line_ell] (1.5,0) -- (1.75,0);
\coordinate[name intersections={of=line_ell and right_arrowhead_of_line_ell, by=a_point_near_right_arrowhead_of_line_ell}];
\coordinate (right_arrowhead_of_line_ell) at ($(a_point_near_right_arrowhead_of_line_ell) +(-70:1.4)$);
\path let \p1=($(T)-($(right_arrowhead_of_line_ell)$)$) in coordinate (left_arrowhead_of_line_ell) at ($(T) +(110:{veclen(\x1,\y1)})$);
\draw[latex-latex] (left_arrowhead_of_line_ell) -- (right_arrowhead_of_line_ell);
\node[anchor=110, inner sep=0, font=\footnotesize] at ($(right_arrowhead_of_line_ell) +(-70:0.1)$){$\ell$};


%Point S is located.
\coordinate (S) at ($(T) +(110:1.55)$);
\draw[fill] (S) circle (1.5pt);
\node[anchor=200, inner sep=0, font=\footnotesize] at ($(S) +(20:0.15)$){\textit{S}};


%Chords of the circle are drawn.
\draw (A) -- (B);
\draw[dashed] (B') -- (A);
\draw[dashed] (B') -- (T);
\draw (A) -- (T);
\draw (A) -- (T);
\draw let \p1=($(B)-(T)$), \n1={atan(\y1/\x1)} in (B) -- ($(T) +({\n1+180}:0.55)$);



%The marks indicating the measures \angle{ATS} and \angle{AB'T} are drawn. They are labeled \theta.
\draw[draw=blue] let \p1=($(A)-(T)$), \n1={atan(\y1/\x1)} in ($(T) +(110:0.25)$) arc (110:{\n1+180}:0.25);
\draw let\p1=($(A)-(T)$), \n1={atan(\y1/\x1)} in node[anchor={0.5*((\n1+180)+110)-180}, inner sep=0, font=\scriptsize] at ($(T) +({0.5*((\n1+180)+110)}:0.3)$){$\theta$};
%
\draw[draw=blue] let \p1=($(B')-(T)$), \n1={atan(\y1/\x1)}, \p2=($(A)-(B')$), \n2={atan(\y2/\x2)} in ($(B') +(\n1:0.25)$) arc (\n1:{\n2+180}:0.25);
\draw let \p1=($(B')-(T)$), \n1={atan(\y1/\x1)}, \p2=($(A)-(B')$), \n2={atan(\y2/\x2)} in node[anchor={0.5*(\n1+(\n2+180))-180}, inner sep=0, font=\scriptsize] at ($(B') +({0.5*(\n1+(\n2+180))}:0.3)$){$\theta$};


%The marks indicating the measures \angle{ATS} and \angle{AB'T} are drawn. They are labeled \theta.
\draw[draw=blue] let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(B)-(T)$), \n2={atan(\y2/\x2)} in ($(B) +(\n2:0.35)$) arc (\n2:{\n1-180}:0.35);
\draw[latex-,shorten <=1pt] let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(B)-(T)$), \n2={atan(\y2/\x2)}, \n3={0.5*((\n1-180)+\n2)} in ($(B) +(\n3:0.45)$) to[out=\n3, in=0, looseness=2] ++(-20pt,7.5pt) node[anchor=east, inner sep=0, font=\tiny]{$180^\circ-\theta$};



\end{tikzpicture}

\end{document}

答案1

只是为了好玩,一个选项使用轮廓将一些标签放在线条前面,然后使用后动作技巧绘制白​​线和黑色箭头以勾勒箭头轮廓,以及一个使用控件的选项示例,可以在 TikzEdt 中轻松编辑。使用的框架是 tkz-euclide,在这种情况下有两个宏来绘制切线。

结果: 在此处输入图片描述

梅威瑟:

\documentclass[border=2mm]{standalone}
\usepackage{xcolor}
\usepackage{amsmath}
\usepackage{tkz-euclide}
\usepackage[outline]{contour}
\usetikzlibrary{arrows.meta}
\usetkzobj{all}
\contourlength{2pt}
\begin{document}
    \begin{tikzpicture}
        % Set limits.
        \tkzInit[xmin=-4,xmax=14.5,ymax=6.5, ymin=-5]
        %\tkzGrid[sub,color=red!20!,subxstep=.2,subystep=.2]
        \tkzClip
        %Define principal points.
        \tkzDefPoint(0,0){O}
        \tkzDefShiftPoint[O](230:3){A}
        \tkzDefShiftPoint[O](110:3){B}
        \tkzDefShiftPoint[O](325:3){C}
        \tkzDefShiftPoint[O](2.5,3.2){S} % From random point external to the circle.
        \tkzTangent[from=S](O,A) \tkzGetPoints{U}{T}

        %Define secondary points.
        \tkzDefPoint(9,0){O'}
        \tkzDefShiftPoint[O'](230:3){A'}
        \tkzDefShiftPoint[O'](110:3){B'}
        \tkzDefShiftPoint[O'](325:3){C'}
        \tkzDefShiftPoint[O'](10:3){T'}
        \tkzTangent[at=T'](O')\tkzGetPoint{h'} % h is a point in the tangent line and 1cm distance from T'
        \tkzDefPointWith[linear,K=3.5](T',h')\tkzGetPoint{S'} % Allows to find a point k distances in the line T'-h'

        %Draw the circles
        \tkzDrawCircle[R,blue](O,3cm)
        \tkzDrawCircle[R,blue](O',3cm)

        % Draw all the angles
        \tkzMarkAngle[fill=blue!15,size=1.5,thick](A,B,T)       
        \tkzMarkAngle[fill=blue, fill opacity=0.2, size=0.7](T,C,A)
        \tkzDrawSegments[thick](B,T) % Must be traced before STA angle
        \tkzMarkAngle[fill=blue!20,fill opacity=0.8, size=0.7](S,T,A)

        \tkzMarkAngle[fill=blue!15,mkpos=1, size=0.7](A',B',T')
        \tkzMarkAngle[fill=blue, fill opacity=0.2,mkpos=.2, size=0.7](T',C',A')
        \tkzDrawSegments[thick](B',T') % Must be traced before STA angle
        \tkzMarkAngle[fill=blue!20,fill opacity=0.8,mkpos=.2, size=0.7](S',T',A')

        % Draw segments.
        \tkzDrawSegments[thick,dashed](A,C C,T)
        \tkzDrawSegments[thick](A,B A,T)

        \tkzDrawSegments[thick,dashed](A',C' C',T')
        \tkzDrawSegments[thick](A',B' A',T')

        {%style only afects commands inside {}
        \tikzset{line style/.append style={<->},>=Stealth} 
            \tkzDrawLine[add=1cm and 4cm](S,T)
            \tkzDrawLine[add=1cm and 3cm,dashed,color=black!30](S,U)
            \tkzDrawLine[add=1cm and 4cm](S',T')
        }

        % Draw points.
        \tkzDrawPoints[fill=white,size=4pt](A,B,C,U)
        \tkzDrawPoints[fill=black,size=5pt](O,T,S)

        \tkzDrawPoints[fill=white,size=4pt](A',B',C')
        \tkzDrawPoints[fill=black,size=5pt](O',T',S')

        %Point labels
            \tkzLabelPoints[color=blue,opacity=.7,above left](B,B',U) 
            \tkzLabelPoints[color=blue,opacity=.7,below left](A,A')
            \tkzLabelPoints[color=blue,opacity=.7,above right =5pt](O,S,T,O',S',T')

            % Label the angles.
            \tkzLabelAngle[pos =1.2, rotate=25](A,B,T){$180-\theta$}
            \tkzLabelAngle[pos =-.4](T,C,A){$\theta$}
            \tkzLabelAngle[pos =-0.4](A,T,S){\contour{blue!20}{$\theta$}}

            %Using pure tikz code           
            \draw[line width=5pt,draw=white, postaction={draw=black, thick,Stealth-}] (B)
                ++(290:45pt) to [in=0,out=290]
                ++(-1.2,-1.5) node[anchor=east] {\contour{white}{\Large $180-\theta$}};
            \draw[line width=5pt,draw=white, postaction={draw=black, thick,Stealth-}] (B') % Option using controls
                ++(290:25.pt) .. controls (8.6,1.1) and (6.4,0.1) .. ++(-2,1) node[anchor=south] {\contour{white}{\Large $180-\theta$}};
            %%%%%%
            \tkzLabelAngle[pos =-1](T',C',A'){\Large $\theta$}
            \tkzLabelAngle[pos =-1](A',T',S'){\contour{white}{\Large $\theta$}}

            % Label the lines
            \tkzLabelLine[pos=2.5,blue,right](S,T){\Large$\ell$}
            \tkzLabelLine[pos=2.15,blue,right](S',T'){\Large$\ell$}

            %Some tikz node text...
            \draw node [anchor=west] at (-4,6) {\verb+\tkzDefShiftPoint[O](2.5,3.2){S}+};
            \draw node [anchor=west] at (-4,5.5) {\verb+\tkzTangent[from=S](O,A) \tkzGetPoints{U}{T}+};

            \draw node [anchor=west] at (4.5,6) {\verb+\tkzTangent[at=T'](O')\tkzGetPoint{h'}+};
            \draw node [anchor=west] at (4.5,5.5) {\verb+\tkzDefPointWith[linear,K=3.5](T',h')\tkzGetPoint{S'}+};


    \end{tikzpicture}
\end{document}

答案2

虽然不是最优雅的解决方案,但它确实有效:

\documentclass[border=5pt]{standalone}
\usepackage{amsmath}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\begin{document}


\begin{tikzpicture}

%AT is a chord of a circle, and B is a point on the circle distinct from A and T. \ell is a
%tangent line to the circle at T. \angle{ABT} and one of the angles between AT and \ell are
%supplementary angles.

\coordinate (O) at (0,0);
\draw[fill] (O) circle (1.5pt);
\draw (0,0) circle (1.5);

\path (230:1.5) coordinate (A) (110:1.5) coordinate (B) (325:1.5) coordinate (B') (20:1.5) coordinate (T);
\draw[fill] (T) circle (1.5pt);
\path let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(A)-(T)$), \n2={atan(\y2/\x2)} in node[anchor={0.5*(\n1+\n2)}, inner sep=0, font=\footnotesize] at ($(A) +({0.5*(\n1+\n2)+180}:0.15)$){\textit{A}};
\path let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(B)-(T)$), \n2={atan(\y2/\x2)} in node[anchor={0.5*((\n1-180)+\n2)}, inner sep=0, font=\footnotesize] at ($(B) +({0.5*((\n1-180)+\n2)+180}:0.15)$){\textit{B}};
\node[anchor=200, inner sep=0, font=\footnotesize] at ($(T) +(20:0.15)$){\textit{T}};


%Line \ell is drawn. T is to be the midpoint of the drawn line.
\path[name path=line_ell] ($(T) +(110:1.25)$) -- ($(T) +(-70:1)$);
\path[name path=right_arrowhead_of_line_ell] (1.5,0) -- (1.75,0);
\coordinate[name intersections={of=line_ell and right_arrowhead_of_line_ell, by=a_point_near_right_arrowhead_of_line_ell}];
\coordinate (right_arrowhead_of_line_ell) at ($(a_point_near_right_arrowhead_of_line_ell) +(-70:1.4)$);
\path let \p1=($(T)-($(right_arrowhead_of_line_ell)$)$) in coordinate (left_arrowhead_of_line_ell) at ($(T) +(110:{veclen(\x1,\y1)})$);
\draw[latex-latex] (left_arrowhead_of_line_ell) -- (right_arrowhead_of_line_ell);
\node[anchor=110, inner sep=0, font=\footnotesize] at ($(right_arrowhead_of_line_ell) +(-70:0.1)$){$\ell$};


%Point S is located.
\coordinate (S) at ($(T) +(110:1.55)$);
\draw[fill] (S) circle (1.5pt);
\node[anchor=200, inner sep=0, font=\footnotesize] at ($(S) +(20:0.15)$){\textit{S}};


%Chords of the circle are drawn.
\draw (A) -- (B);
\draw[dashed] (B') -- (A);
\draw[dashed] (B') -- (T);
\draw (A) -- (T);
\draw (A) -- (T);
\draw let \p1=($(B)-(T)$), \n1={atan(\y1/\x1)} in (B) -- ($(T) +({\n1+180}:0.55)$);



%The marks indicating the measures \angle{ATS} and \angle{AB'T} are drawn. They are labeled \theta.
\draw[draw=blue] let \p1=($(A)-(T)$), \n1={atan(\y1/\x1)} in ($(T) +(110:0.25)$) arc (110:{\n1+180}:0.25);
\draw let\p1=($(A)-(T)$), \n1={atan(\y1/\x1)} in node[anchor={0.5*((\n1+180)+110)-180}, inner sep=0, font=\scriptsize] at ($(T) +({0.5*((\n1+180)+110)}:0.3)$){$\theta$};
%
\draw[draw=blue] let \p1=($(B')-(T)$), \n1={atan(\y1/\x1)}, \p2=($(A)-(B')$), \n2={atan(\y2/\x2)} in ($(B') +(\n1:0.25)$) arc (\n1:{\n2+180}:0.25);
\draw let \p1=($(B')-(T)$), \n1={atan(\y1/\x1)}, \p2=($(A)-(B')$), \n2={atan(\y2/\x2)} in node[anchor={0.5*(\n1+(\n2+180))-180}, inner sep=0, font=\scriptsize] at ($(B') +({0.5*(\n1+(\n2+180))}:0.3)$){$\theta$};


%The marks indicating the measures \angle{ATS} and \angle{AB'T} are drawn. They are labeled \theta.
\draw[draw=blue] let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(B)-(T)$), \n2={atan(\y2/\x2)} in ($(B) +(\n2:0.35)$) arc (\n2:{\n1-180}:0.35);


%\draw[latex-,shorten <=1pt] let \p1=($(A)-(B)$), \n1={atan(\y1/\x1)}, \p2=($(B)-(T)$), \n2={atan(\y2/\x2)}, \n3={0.5*((\n1-180)+\n2)} in ($(B) +(\n3:0.45)$) to[out=\n3, in=0, looseness=2] ++(-20pt,7.5pt) node[anchor=east, inner sep=0, font=\tiny]{$180^\circ-\theta$};

\node[inner sep=0pt] at (-1.8,1.26) (a) {\tiny $180^\circ-\theta$};
    \draw[>=latex,->] (a.south) to[bend right=60] +(.9,-.15);


\end{tikzpicture}

\end{document}

截屏

相关内容