직각 마크가 제대로 표시되지 않음

직각 마크가 제대로 표시되지 않음

TikZ다음 코드를 컴파일하여 직각으로 교차하는 두 개의 선을 표시합니다. 모서리 길이가 3mm이고 교차점에 정점이 있는 검정색으로 그려진 작은 사각형은 선이 직각으로 교차함을 나타냅니다. 직각 마크굴곡하지만 원점의 점 주위에 있습니다. 이러한 왜곡을 피할 수 있는 방법은 무엇입니까? (직각 표시가 y축을 가리고 원점의 점이 가려지길 원합니다.)

이것은 제가 화살촉 자르기에 관해 질문할 때 게시했던 것과 유사한 코드입니다. 이 작업을 계속하는 한 가지 방법은 \path[name path=up] (-3.75,3.75) -- (3.75,3.75);... 명령을 실행 \path[name path=left] (-3.75,-3.75) -- (-3.75,3.75);하고 패키지를 사용하여 intersections주어진 선과 이 네 경로 사이의 네 교차점의 좌표에 레이블을 지정하는 것입니다. 하지만 패키지 사용에 익숙하지 않습니다 intersections.

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

답변1

당신은 스타일을 p좌표에 O사용 하고 있습니다 p.

p/.style={circle, fill,inner sep=1.5pt}

즉, 해당 좌표에는 inner sep. 따라서 에서 직각 표시를 그리기 시작하면 O의 경계에서 시작하여 O동일한 cycle경계 지점으로 돌아옵니다. 따라서 왜곡이 발생합니다. 이 사용을 피하려면 O.center.

아 안돼!, 의 검은색 원에 나타납니다 O. 이를 방지하려면 tikz 라이브러리를 사용 backgrounds하고 다음과 같이 뒷면 그라운드 레이어의 전체 직각 표시를 밀어 넣으십시오.

\begin{scope}[on background layer]
\filldraw[fill=white] (O.center) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
\end{scope}

y그러나 발생하지 않는 축을 가리기 위해 직각 표시를 원합니다 . 따라서 축을 그리는 선을 y이전 범위로 이동하십시오.~ 전에코드 right angle라인은 다음과 같습니다

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

전체 코드:

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

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

답변2

직각을 나타내는 정사각형이 필요한 이유는 무엇입니까? 두줄로 하면 됩니다. 그냥 교체하세요

\filldraw[fill=white] (O) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;

~와 함께

\filldraw[fill=white] ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$);

각도 그림

그러나 정말로 정사각형을 원한다면 문제는 좌표를 정의하지 않았기 O때문에 다른 좌표 아래에 을 추가한다는 것입니다 \coordinate (O) at (0,0);. 보여드리기 위해 빨간색으로 칠해봤습니다.

그림 각도

원점도 포함하지 않으려면 이를 프리앰블에 추가하세요.

\pgfdeclarelayer{bg}   
\pgfsetlayers{bg,main}

그리고 이렇게 하세요:

\begin{pgfonlayer}{bg}
\filldraw[red,fill=white] (O) -- ($(O)!(R)!(P)$) -- (R) -- ($(O)!(R)!(Q)$) -- cycle;
\end{pgfonlayer}

관련 정보