주어진 선에 수직인 특정 길이의 선분 그리기

주어진 선에 수직인 특정 길이의 선분 그리기

을 사용하여 그리고 싶은 전형적인 기하학적 구조가 있습니다 TikZ. 다음 코드는 선분을 제공합니다 PQ. 선분 아래의 단위 에 수직 인 TikZ선에 점을 그리려면 PQ어떻게 해야 합니까 ? 그러기 위해서는 서문이 있어야 한다고 생각합니다 . (이 점에 R이라는 라벨을 붙이고 직각 삼각형을 그리고 싶습니다 .) 삼각형이 직각 삼각형임을 나타내기 위해 사용하려면 프리앰블에 이 있어야 합니까 ?P2\sqrt{2}PQ\usetikzlibrary{calc}QPR\tkzMarkRightAngle(Q,P,R);\usepackage{tkz-euclide}

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{shapes,positioning,intersections,quotes}


\begin{document}

\begin{tikzpicture}

\draw[yellow, line width=0.1pt] (-1.75,-1.75) grid[xstep=0.5, ystep=0.5]  (2.75,1.75);
\draw[draw=gray!30,latex-latex] (0,1.75) +(0,0.25cm) node[above right] {$y$} -- (0,-1.75) -- +(0,-0.25cm);
\draw[draw=gray!30,latex-latex] (-1.75,0) +(-0.25cm,0) -- (2.75,0) -- +(0.25cm,0) node[below right] {$x$};

\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$P$}] (P) at (-1,-1) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$Q$}] (Q) at (2,1) {};

\draw[green!20!white] (P) -- (Q);

\end{tikzpicture}
\end{document}

답변1

설명 주석이 있는지 코드를 확인하세요.

\documentclass{amsart}
\usepackage{tikz}

%% you need the following 2 lines to use \tkzMarkRightAngle
%\usepackage{tkz-euclide}
%\usetkzobj{all}

\usetikzlibrary{shapes,positioning,intersections,quotes,calc}


\begin{document}

\begin{tikzpicture}

\draw[yellow, line width=0.1pt] (-1.75,-5) grid[xstep=0.5, ystep=0.5]  (2.75,1.75);
\draw[draw=gray!30,latex-latex] (0,1.75) +(0,0.25cm) node[above right] {$y$} -- (0,-1.75) -- +(0,-0.25cm);
\draw[draw=gray!30,latex-latex] (-1.75,0) +(-0.25cm,0) -- (2.75,0) -- +(0.25cm,0) node[below right] {$x$};

\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$P$}] (P) at (-1,-1) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$Q$}] (Q) at (2,1) {};

\draw[green!20!white] (P) -- (Q);

%% the perpendicular
\pgfmathparse{2*sqrt(5)}
\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$R$}] (R) at ($ (P)!\pgfmathresult cm! -90:(Q) $) {};
\draw[green!20!white] (P) -- (R) -- (Q);


%% right angle with tkz-euclide
%\coordinate (p) at (P);
%\tkzMarkRightAngle[color=green!20!white](Q,p,R)
%\fill (p) circle (2.1pt);  %% to make the dot above right angle again.

\coordinate (a) at ($ (P)!5mm! -45:(Q) $);
\draw[green!20!white] (a) -- ($(P)!(a)!(Q)$);
\draw[green!20!white] (a) -- ($(P)!(a)!(R)$);

\end{tikzpicture}
\end{document}

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

답변2

귀하의 질문에 답하기 위해 tikz는 C 코드인 2*sqrt(5)와 유사한 pgfmathparse를 통해 거의 모든 것을 실행합니다. BTW는 기본 크기에서 4cm를 초과합니다. ($(P)!1!90:(Q)$)는 (P)에서 시작하여 (Q) 방향에서 90도(시계 반대 방향)로 (Q)까지 1배 거리를 이동한다는 의미입니다.

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{shapes,positioning,intersections,quotes,calc}

\begin{document}

\begin{tikzpicture}

\draw[yellow, line width=0.1pt] (-1.75,-1.75) grid[xstep=0.5, ystep=0.5]  (2.75,1.75);
\draw[draw=gray!30,latex-latex] (0,1.75) +(0,0.25cm) node[above right] {$y$} -- (0,-1.75) -- +(0,-0.25cm);
\draw[draw=gray!30,latex-latex] (-1.75,0) +(-0.25cm,0) -- (2.75,0) -- +(0.25cm,0) node[below right] {$x$};

\node[outer sep=0pt,circle, fill,inner sep=1.5pt,label={[fill=white]left:$P$}] (P) at (-1,-1) {};
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$Q$}] (Q) at (2,1) {};

\draw[green!20!white] (P) -- (Q);

\coordinate (R) at ($(P)!2cm*sqrt(5)!-90:(Q)$);
\node[outer sep=0pt,circle, fill,inner sep=1.5pt, label={[fill=white]right:$R$}] at(R) {};

\end{tikzpicture}
\end{document}

석회질 사용량

답변3

실제로는 강제로 사용할 수 없습니다 \usepackage{tkz-euclide}. \tkzMarkRightAngle(Q,P,R)pure 보다 쉬운 구성을 제공할 뿐이지 만 @HarishKumar가 한 것처럼 tikz만 사용하면 비교적 쉽게 달성할 수도 있습니다 . tikz또한 style축과 점에 s를 사용하면 코드가 더 깔끔해집니다.

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}\small

\begin{tikzpicture}[outer sep=0pt,p/.style={circle, fill,inner sep=1.5pt},ax/.style={draw=gray!50,latex-latex}]
\draw[yellow,line width=0.1pt] (-2.75cm,-1.75cm) grid[xstep=0.5, ystep=0.5]  (2.75cm,1.75cm);
\draw[ax](0,1.75cm) +(0,0.25cm) node[above] {$y$} -- (0,-1.75cm) -- +(0,-0.25cm);
\draw[ax](-2.75cm,0) +(-0.25cm,0) -- (2.75cm,0) -- +(0.25cm,0) node[right] {$x$};
\coordinate[p,label={[fill=white]below:$P$}] (P) at (-1cm,-1cm);
\coordinate[p,label={[fill=white]right:$Q$}] (Q) at (2cm,1cm);
\coordinate[p,label={[fill=white]left :$R$}] (R) at ($(P)!{2cm*sqrt(2)}!90:(Q)$);
\draw (P)--(R)--(Q)--(P)--cycle;
\coordinate (a) at ($(P)!4mm!45:(Q)$);
\draw ($(P)!(a)!(Q)$) -- (a) -- ($(P)!(a)!(R)$);
\end{tikzpicture}

\end{document}

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

답변4

관심 있는 사람들을 위해 (다른 무엇보다도) 그것을 수행하는 방법메타포스트.

PR이 PQ에 수직이고 PQ 아래의 P에서 단위만큼 떨어진 지점 R은 2\sqrt{2}다음 명령으로 제공됩니다( u여기서 단위 길이 cm).

 R = P + 2u*sqrt2*unitvector(Q-P) rotated -90;

anglebetweenMetaPost의 매크로메타펀형식을 사용하면 매개변수가 2로 설정된 경우 교차하는 두 세그먼트 사이에 매우 쉽게 직각 표시를 그릴 수 P--Q있으며 P--R(세 번째 인수는 레이블, 여기서는 빈 문자열) anglemethod이 매개변수의 기본값인 1을 사용하면 표시가 됩니다. 원호가 되세요. 원하는 마크 길이는 다른 매개변수에 대한 인수로 제공되어야 합니다 anglelength(기본값은 20pt).

  anglemethod := 2; anglelength := 2mm;
  draw anglebetween(P--Q, P--R, "");

보다메타펀 매뉴얼, p. 자세한 내용은 279를 참조하세요.

\documentclass[border=2mm]{standalone}
\usepackage{luamplib}
  \mplibsetformat{metafun}
  \mplibtextextlabel{enable}
\begin{document}
  \begin{mplibcode}
    % Axes parameters
    u := cm; % Unit length
    xmin := -1.75u; xstep := .5u; xmax := 2.75u; 
    ymin := -5u; ystep := xstep; ymax := 1.75u;
    % Triangle summits
    pair P, Q, R; P = u*(-1, -1); Q = u*(2, 1); 
    R = P + 2u*sqrt2*unitvector(Q-P) rotated -90;
    beginfig(1);
      % Grid
      drawoptions(withcolor yellow);
      for i = ceiling(xmin/xstep) upto floor(xmax/xstep):
        draw (i*xstep, ymin) -- (i*xstep, ymax);
      endfor 
      for j = ceiling(ymin/ystep) upto floor(ymax/ystep):
        draw (xmin, j*ystep) -- (xmax, j*ystep);
      endfor
      % Axes
      drawoptions(withcolor .8white);
      drawarrow (xmin, 0) -- (xmax, 0); 
      drawarrow (0, ymin) -- (0, ymax); 
      % Triangle
      drawoptions(withcolor green);
      path triangle; triangle = P--Q--R--cycle; draw triangle;
      % Right-angle mark of length 2 mm (and no label)
      anglemethod := 2; anglelength := 2mm;
      draw anglebetween(P--Q, P--R, "");
      % Labels
      drawoptions();
      label.bot("$x$", (xmax, 0)); label.lft("$y$", (0, ymax));
      dotlabel.lft("$P$", P); dotlabel.rt("$Q$", Q); dotlabel.bot("$R$", R);
    endfig;
  \end{mplibcode}
\end{document}

LuaLaTeX로 조판됩니다. 산출:

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

관련 정보