我收到以下错误:Package pgf 错误:没有已知名为 Q 的形状。如果没有 \begin{axis} ... \end{axis},代码可以编译,但所描绘的图像会乱成一团。我打算得到一个直角三角形,其顶点为 A、P 和 Q,在 Q 处有一个直角。B 是通过 P 和 Q 的直线上的一个点。如何在 Q 处画出一个直角?
\documentclass[10pt]{amsart}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{mathtools,array}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,intersections,quotes,decorations.markings}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[width=6in,axis equal image,
axis lines=middle,
xmin=-10,xmax=10,samples=201,
xlabel=$x$,ylabel=$y$,
ymin=-4,ymax=6,
restrict y to domain=-4:6,
enlargelimits={abs=0.5cm},
axis line style={latex-latex},
ticklabel style={font=\tiny,fill=white},
xtick={\empty},ytick={\empty},
xlabel style={at={(ticklabel* cs:1)},anchor=north west},
ylabel style={at={(ticklabel* cs:1)},anchor=south west}
]
\path (80:3) coordinate (a) (20:3.5) coordinate (b) (0:0) node[label=below left:$P$]{} coordinate(P)(-100:1)coordinate (e) (-160:1) coordinate (f)(80:2) node [label=above left:$A$]{} coordinate (A) (20:2.5) node [label=below:$B$]{} coordinate (B) ($(P)!(A)!(B)$) coordinate (Q) node [label=below:$Q$]{};
\draw[<->] (a) node [above left ]{$l$} -- (e);
\draw[<->] (b) node [below right]{$k$} -- (f);
\draw[purple!70!black,dashed] (A) -- (Q);
%\tkzMarkRightAngle(A,Q,P);
\draw[|<->|] ($(P)!3mm!90:(A)$)--node[fill=white,sloped] {$r$} ($(A)!3mm!-90:(P)$);
\draw[|<->|] ($(P)!-3mm!90:(Q)$)--node[fill=white,sloped] {$x$} ($(Q)!-3mm!-90:(P)$);
\draw[|<->|] ($(Q)!-3mm!90:(A)$)--node[fill=white,sloped] {$y$} ($(A)!-3mm!-90:(Q)$);
\path pic[draw, angle radius=5mm,"$\theta$",angle eccentricity=1.25] {angle = B--P--A};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
这是其中一种方法。首先,该提案将点转换为轴 cs 坐标,以便它们与 pgfplot 轴可比。
三角形的直角是通过网格线交叉点找到的,也就是说,找到与直线 AQ 和 PQ 平行的平行线的交点。
代码
\documentclass[border=10pt]{standalone}%[10pt]{amsart}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{mathtools,array}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,intersections,quotes,decorations.markings}
\usepackage{tkz-euclide}
\usetkzobj{all}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[width=6in,axis equal image,
axis lines=middle,
xmin=-2,xmax=4,samples=201,
xlabel=$x$,ylabel=$y$,
ymin=-2,ymax=3,
restrict y to domain=-4:6,
enlargelimits={abs=0.5cm},
axis line style={latex-latex},
ticklabel style={font=\tiny,fill=white},
xtick={\empty},ytick={\empty},
xlabel style={at={(ticklabel* cs:1)},anchor=north west},
ylabel style={at={(ticklabel* cs:1)},anchor=south west}
]
% Convert all points into axis cs system
\node[] at (axis cs: {3*cos(80)},{3*sin(80)}) (a){};
\node[] at (axis cs: {3.5*cos(20)},{3.5*sin(20)}) (b){};
\node[label=below left:$P$] at (axis cs: 0,0) (P){};
\node[] at (axis cs: {1*cos(-100)},{1*sin(-100)}) (e){};
\node[] at (axis cs: {1*cos(-160)},{1*sin(-160)}) (f){};
\node[label=above left:$A$] at (axis cs: {2*cos(80)},{2*sin(80)})(A){};
\node[label=below:$B$] at (axis cs: {2.5*cos(20)},{2.5*sin(20)}) (B){} ;
\node[label=below right:$Q$,coordinate] at ($(P)!(A)!(B)$) (Q){};
\node [] at (axis cs:0.5,3){$l$};
\node [] at (axis cs:3,0.9){$k$};
\draw[<->] (a) -- (e);
\draw[<->,name path=linea] (b) -- (f); % added path name
\draw[purple!70!black,dashed,name path=lineb] (A) -- (Q); % added path name
%
\draw[|<->|] ($(P)!3mm!90:(A)$)--node[fill=white,sloped] {$r$} ($(A)!3mm!-90:(P)$);
\draw[|<->|] ($(P)!-3mm!90:(Q)$)--node[fill=white,sloped] {$x$} ($(Q)!-3mm!-90:(P)$);
\draw[|<->|] ($(Q)!-3mm!90:(A)$)--node[fill=white,sloped] {$y$} ($(A)!-3mm!-90:(Q)$);
\path pic[draw, angle radius=5mm,"$\theta$",angle eccentricity=1.25] {angle = B--P--A};
% draw parallel lines
\path[name path=line1,red] ([yshift=1cm]$(P)!0!(Q)$) -- ([yshift=1cm]$(P)!1!(Q)$);
\path[name path=line2,red] ([yshift=-2cm]$(A)!0!(Q)$) -- ([yshift=-2cm]$(A)!1!(Q)$);
% find intersections
\path [name intersections={of=line1 and line2,by={E}}]; % corner tip
\path [name intersections={of=line2 and linea,by={E2}}];
\path [name intersections={of=line1 and lineb,by={E1}}];
% draw the right angle
\draw[red] (E1)--(E)--(E2);
\end{axis}
\end{tikzpicture}
\end{document}