Eine rechtwinklige Markierung wird nicht richtig angezeigt

Eine rechtwinklige Markierung wird nicht richtig angezeigt

TikZkompiliert 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 intersectionsPaket zu verwenden, um die Koordinaten der vier Schnittpunkte zwischen den gegebenen Linien und diesen vier Pfaden zu kennzeichnen. Ich bin intersectionsjedoch 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 pfür die Koordinate, Owo pist

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 Ound cyclekommt 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 backgroundsund 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 yAchse verdeckt, was jedoch nicht der Fall ist. Verschieben Sie daher die Linie, die die yAchse zeichnet, in den vorherigen Bereich.Vordie right angleCodezeile 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}

Bildbeschreibung hier eingeben

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)$);

Winkel Figur

Wenn Sie jedoch wirklich das Quadrat möchten, besteht das Problem darin, dass Sie die Koordinate nicht definiert haben. OFügen Sie daher unterhalb der anderen Koordinaten hinzu \coordinate (O) at (0,0);. Ich habe es rot eingefärbt, um es anzuzeigen.

Figur Winkel

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}

verwandte Informationen