TikZ
kompiliert den folgenden Code, um zwei Linien anzuzeigen, die sich im rechten Winkel schneiden. Ein kleines, schwarz gezeichnetes Quadrat mit einer Kantenlänge von 3 mm und einem Scheitelpunkt am Schnittpunkt zeigt an, dass sich die Linien im rechten Winkel schneiden. Die rechtwinklige MarkierungKurvenum den Punkt am Ursprung herum. Wie kann ich diese Verzerrung vermeiden? (Ich möchte, dass die rechtwinklige Markierung die y-Achse verdeckt, aber nicht den Punkt am Ursprung.)
Dies ist ein ähnlicher Code, den ich gepostet hatte, als ich nach dem Abschneiden von Pfeilspitzen fragte. Ich denke, eine Möglichkeit, dies weiterhin zu tun, besteht darin, Befehle auszugeben \path[name path=up] (-3.75,3.75) -- (3.75,3.75);
, ... \path[name path=left] (-3.75,-3.75) -- (-3.75,3.75);
und das intersections
Paket zu verwenden, um die Koordinaten der vier Schnittpunkte zwischen den gegebenen Linien und diesen vier Pfaden zu kennzeichnen. Ich bin intersections
jedoch nicht mit der Verwendung des Pakets vertraut.
\documentclass[10pt]{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,quotes}
\begin{document}
\begin{tikzpicture}[outer sep=0pt,p/.style={circle, fill,inner sep=1.5pt}]
\draw[draw=gray!30,latex-latex] (-3.75,0) +(-0.25cm,0) -- (3.75,0) -- +(0.25cm,0) node[below right] {$x$};
\draw[draw=gray!30,latex-latex] (0,3.75) +(0,0.25cm) node[above right] {$y$} -- (0,-3.75) -- +(0,-0.25cm);
\clip (-3.75,-3.75) rectangle (3.75,3.75);
\draw[gray,dashed,line width=0.1pt] (-3.75,3.75) -- (3.75,3.75);
\draw[gray,dashed,line width=0.1pt] (-3.75,-3.75) -- (3.75,-3.75);
\draw[gray,dashed,line width=0.1pt] (-3.75,-3.75) -- (-3.75,3.75);
\draw[gray,dashed,line width=0.1pt] (3.75,-3.75) -- (3.75,3.75);
\draw[draw=blue!30,-latex] (0,0) -- (142:5);
\draw[draw=blue!30,-latex] (0,0) -- (-38:5);
\draw[draw=green!50,-latex] (0,0) -- (52:5);
\draw[draw=green!50,-latex] (0,0) -- (-128:5);
\coordinate[p,label={[fill=white]below right:$O$}] (O) at (0,0);
\coordinate (A) at (0:1);
\coordinate (B) at (52:1);
\path pic[draw, angle radius=5mm,"$\phi$",angle eccentricity=1.25] {angle = A--O--B};
\coordinate (a) at (180:1);
\coordinate (b) at (142:1);
\path pic[draw, angle radius=5mm,"$\theta$",angle eccentricity=1.25] {angle = b--O--a};
\coordinate (P) at (142:1);
\coordinate (Q) at (52:1);
\coordinate (R) at ($(O)!4mm! -45:(P)$);
\draw (R) -- ($(O)!(R)!(P)$);
\draw (R) -- ($(O)!(R)!(Q)$);
\filldraw[fill=white] (O) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
\end{tikzpicture}
\end{document}
Antwort1
Sie verwenden den Stil p
für die Koordinate, O
wo p
ist
p/.style={circle, fill,inner sep=1.5pt}
d. h., diese Koordinate hat ein inner sep
. Wenn Sie also beginnen, die rechte Winkelmarke von zu zeichnen O
, beginnt sie am Rand von O
und cycle
kommt mit zum gleichen Randpunkt zurück. Daher kommt es zu einer Verzerrung. Um dies zu vermeiden, verwenden Sie O.center
.
Oh nein!, es erscheint auf dem schwarzen Kreis bei O
. Um dies zu vermeiden, verwenden Sie die Tikz-Bibliothek backgrounds
und schieben Sie die gesamte rechte Winkelmarkierung auf die Hintergrundebene wie
\begin{scope}[on background layer]
\filldraw[fill=white] (O.center) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
\end{scope}
Sie möchten jedoch, dass die rechte Winkelmarkierung die y
Achse verdeckt, was jedoch nicht der Fall ist. Verschieben Sie daher die Linie, die die y
Achse zeichnet, in den vorherigen Bereich.Vordie right angle
Codezeile wie
\begin{scope}[on background layer]
\draw[draw=gray!30,latex-latex] (0,3.75) +(0,0.25cm) node[above right] {$y$} -- (0,-3.75) -- +(0,-0.25cm);
\filldraw[fill=white] (O.center) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
\end{scope}
Vollständiger Code:
\documentclass[10pt]{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,quotes,backgrounds}
\begin{document}
\begin{tikzpicture}[outer sep=0pt,p/.style={circle, fill,inner sep=1.5pt}]
\draw[draw=gray!30,latex-latex] (-3.75,0) +(-0.25cm,0) -- (3.75,0) -- +(0.25cm,0) node[below right] {$x$};
\clip (-3.75,-3.75) rectangle (3.75,3.75);
\draw[gray,dashed,line width=0.1pt] (-3.75,3.75) -- (3.75,3.75);
\draw[gray,dashed,line width=0.1pt] (-3.75,-3.75) -- (3.75,-3.75);
\draw[gray,dashed,line width=0.1pt] (-3.75,-3.75) -- (-3.75,3.75);
\draw[gray,dashed,line width=0.1pt] (3.75,-3.75) -- (3.75,3.75);
\draw[draw=blue!30,-latex] (0,0) -- (142:5);
\draw[draw=blue!30,-latex] (0,0) -- (-38:5);
\draw[draw=green!50,-latex] (0,0) -- (52:5);
\draw[draw=green!50,-latex] (0,0) -- (-128:5);
\coordinate[p,label={[fill=white]below right:$O$}] (O) at (0,0);
\coordinate (A) at (0:1);
\coordinate (B) at (52:1);
\path pic[draw, angle radius=5mm,"$\phi$",angle eccentricity=1.25] {angle = A--O--B};
\coordinate (a) at (180:1);
\coordinate (b) at (142:1);
\path pic[draw, angle radius=5mm,"$\theta$",angle eccentricity=1.25] {angle = b--O--a};
\coordinate (P) at (142:1);
\coordinate (Q) at (52:1);
\coordinate (R) at ($(O)!4mm! -45:(P)$);
\draw (R) -- ($(O)!(R)!(P)$);
\draw (R) -- ($(O)!(R)!(Q)$);
\begin{scope}[on background layer]
\draw[draw=gray!30,latex-latex] (0,3.75) +(0,0.25cm) node[above right] {$y$} -- (0,-3.75) -- +(0,-0.25cm);
\filldraw[fill=white] (O.center) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
\end{scope}
\end{tikzpicture}
\end{document}
Antwort2
Warum ein Quadrat, um einen rechten Winkel anzuzeigen? Sie können es mit zwei Linien tun. Ersetzen Sie einfach
\filldraw[fill=white] (O) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
mit
\filldraw[fill=white] ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$);
Wenn Sie jedoch wirklich das Quadrat möchten, besteht das Problem darin, dass Sie die Koordinate nicht definiert haben. O
Fügen Sie daher unterhalb der anderen Koordinaten hinzu \coordinate (O) at (0,0);
. Ich habe es rot eingefärbt, um es anzuzeigen.
Um nicht auch den Ursprungspunkt zu verdecken, fügen Sie dies in die Präambel ein
\pgfdeclarelayer{bg}
\pgfsetlayers{bg,main}
Und machen Sie Folgendes:
\begin{pgfonlayer}{bg}
\filldraw[red,fill=white] (O) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
\end{pgfonlayer}