TikZ를 사용하여 변과 라벨의 사각형으로 피타고라스 삼각형을 그립니다.

TikZ를 사용하여 변과 라벨의 사각형으로 피타고라스 삼각형을 그립니다.

나는 이전 질문과 TikZ 매뉴얼을 확인하면서 이것을 만들었고 피타고라스 삼각형의 변의 사각형을 그리고 싶습니다.

지금까지 나는

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[scale=1.25]%,cap=round,>=latex]

\coordinate [label=left:$C$] (A) at (-1.5cm,-1.cm);
\coordinate [label=right:$A$] (C) at (1.5cm,-1.0cm);
\coordinate [label=above:$B$] (B) at (1.5cm,1.0cm);
\draw (A) -- node[above] {$a$} (B) -- node[right] {$c$} (C) -- node[below] {$b$} (A);

\draw (1.25cm,-1.0cm) rectangle (1.5cm,-0.75cm);

\end{tikzpicture}

\end{document}

생산하는

산출

답변1

가장 먼저 해야 할 일: 삼각형의 너비와 높이를 상수로 만들어 나중에 필요할 때 변경할 수 있도록 합시다. 다음은 사용한 값이지만 한 번 로드하고 다른 모든 것을 즉시 계산하면 나중에 변경하기가 더 쉬워집니다.

\newcommand{\pythagwidth}{3cm}
\newcommand{\pythagheight}{2cm}

다음으로, 이름이 인쇄된 라벨과 일치하도록 좌표의 라벨을 다시 지정하세요. 그렇지 않으면 매우 혼란스러울 것입니다.

\coordinate [label={below right:$A$}] (A) at (0, 0);
\coordinate [label={above right:$B$}] (B) at (0, \pythagheight);
\coordinate [label={below left:$C$}] (C) at (-\pythagwidth, 0);

직사각형 중 두 개(가로 및 세로 가장자리에 일치하는 것)는 약간 장황하더라도 그리기 쉽습니다.

\draw [dashed] (A) -- node [below] {$b$} ++ (-\pythagwidth, 0)
                -- node [right] {$b$} ++ (0, -\pythagwidth)
                -- node [above] {$b$} ++ (\pythagwidth, 0)
                -- node [left] {$b$} ++ (0, \pythagwidth);

\draw [dashed] (A) -- node [right] {$c$} ++ (0, \pythagheight)
                -- node [below] {$c$} ++ (\pythagheight, 0)
                -- node [left] {$c$} ++ (0, -\pythagheight)
                -- node [above] {$c$} ++ (-\pythagheight, 0);

이러한 변경 사항을 통해 우리는 다음과 같은 이점을 얻을 수 있습니다.

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

그런 다음 빗변에 해당하는 정사각형을 그려야 합니다. 빗변 자체를 계산하는 것은 과도한 것 같습니다(읽기: 피곤해서 지금 어떻게 해야 하는지 기억이 나지 않습니다 :P). 대신에 작은 평면 기하학을 사용할 수 있습니다:

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

원래 삼각형을 90도 회전한 다음 적절하게 이동하면 사각형의 또 다른 모서리를 찾을 수 있습니다. 동일한 방법을 사용하여 TikZ에서 빗변 정사각형의 두 추가 좌표를 찾을 수 있습니다.

\coordinate (D1) at (-\pythagheight, \pythagheight + \pythagwidth);
\coordinate (D2) at (-\pythagheight - \pythagwidth, \pythagwidth);

이 정사각형을 그리는 것은 간단합니다.

\draw [dashed] (C) -- node [above left] {$a$} (B)
                   -- node [below left] {$a$} (D1)
                   -- node [below right] {$a$} (D2)
                   -- node [above right] {$a$} (C);

이 모든 것을 종합하면 다음과 같습니다.

\documentclass{article}

\usepackage{tikz}

\begin{document}

\newcommand{\pythagwidth}{3cm}
\newcommand{\pythagheight}{2cm}

\begin{tikzpicture}

  \coordinate [label={below right:$A$}] (A) at (0, 0);
  \coordinate [label={above right:$B$}] (B) at (0, \pythagheight);
  \coordinate [label={below left:$C$}] (C) at (-\pythagwidth, 0);

  \coordinate (D1) at (-\pythagheight, \pythagheight + \pythagwidth);
  \coordinate (D2) at (-\pythagheight - \pythagwidth, \pythagwidth);

  \draw [very thick] (A) -- (C) -- (B) -- (A);

  \newcommand{\ranglesize}{0.3cm}
  \draw (A) -- ++ (0, \ranglesize) -- ++ (-\ranglesize, 0) -- ++ (0, -\ranglesize);

  \draw [dashed] (A) -- node [below] {$b$} ++ (-\pythagwidth, 0)
            -- node [right] {$b$} ++ (0, -\pythagwidth)
            -- node [above] {$b$} ++ (\pythagwidth, 0)
            -- node [left] {$b$} ++ (0, \pythagwidth);

  \draw [dashed] (A) -- node [right] {$c$} ++ (0, \pythagheight)
            -- node [below] {$c$} ++ (\pythagheight, 0)
            -- node [left] {$c$} ++ (0, -\pythagheight)
            -- node [above] {$c$} ++ (-\pythagheight, 0);

  \draw [dashed] (C) -- node [above left] {$a$} (B)
                     -- node [below left] {$a$} (D1)
                     -- node [below right] {$a$} (D2)
                     -- node [above right] {$a$} (C);

\end{tikzpicture}

\end{document}

생산하는

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

답변2

원본보다 더 단순화된 버전입니다. 여기서 아이디어는 단순히 사용하는 것입니다

($ (<name1>) ! {sin(90)} ! 90:(<name2>) $)

<name1>선분을 연결하는 에서 <name1>수직 인 점을 찾으려면 <name2>; 새 점과 사이의 거리는 과 <name1>사이의 거리와 같습니다 .<name1><name2>

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}[scale=1.25]
\coordinate [label=left:$A$] (A) at (-1.5cm,-1.cm);
\coordinate [label=below right:$C$] (C) at (1.5cm,-1.0cm);
\coordinate [label=above:$B$] (B) at (1.5cm,1.0cm);

\draw 
  (A) -- 
  node[above] {$c$} (B) -- 
  node[right] {$b$} (C) -- 
  node[below] {$a$} 
  (A);
\draw 
  (1.25cm,-1.0cm) rectangle (1.5cm,-0.75cm);

\coordinate (aux1) at
  ($ (A) ! {sin(90)} ! 90:(B) $);
\coordinate (aux2) at
  ($ (aux1) ! {sin(90)} ! 90:(A) $);

\coordinate (aux3) at
  ($ (A) ! {sin(90)} ! -90:(C) $);
\coordinate (aux4) at
  ($ (aux3) ! {sin(90)} ! -90:(A) $);

\coordinate (aux5) at
  ($ (C) ! {sin(90)} ! -90:(B) $);
\coordinate (aux6) at
  ($ (aux5) ! {sin(90)} ! -90:(C) $);

\draw[ultra thick,green,text=black]
  (A) -- 
  (aux1) node[midway,auto,swap] {$c$} -- 
  (aux2) node[midway,auto,swap] {$c$} -- 
  (B) node[midway,auto,swap] {$c$};
\draw[ultra thick,green,text=black]
  (A) -- 
  (aux3) node[midway,auto] {$a$} -- 
  (aux4) node[midway,auto] {$a$}  -- 
  (C) node[midway,auto] {$a$};
\draw[ultra thick,green,text=black]
  (C) -- 
  (aux5) node[midway,auto] {$b$} -- 
  (aux6) node[midway,auto] {$b$} -- 
  (B) node[midway,auto] {$b$};
\end{tikzpicture}

\end{document}

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

이를 통해 일반적인 경우(공선상에 있지 않은 세 개의 점에 대해) 정사각형 구성을 위한 명령을 정의할 수 있습니다.

\PythTr[<options>]{<name1>}{<name2>}{<name3>}{<coord1>}{<coord2>}{<coord3>}

여기서 <name1>,..., <name3>는 정점의 이름이고 <coor1>,..., <coor3>는 세 정점의 좌표입니다. 선택적 인수를 사용하여 사각형을 그리는 방법을 제어하는 ​​옵션을 전달할 수 있습니다. 예를 들어, 아래 그림은 다음과 같이 얻었습니다.

\begin{tikzpicture}
\PythTr{A}{B}{C}{(-1.5cm,-1.cm)}{(1.5cm,-1.0cm)}{(1.5cm,1.0cm)}
\end{tikzpicture}\par\bigskip

\begin{tikzpicture}
\PythTr[Maroon,dashed]{L}{M}{N}{(2,-2)}{(4,2)}{(0,2)}
\end{tikzpicture}

코드:

\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\PythTr[7][ultra thick,green,text=black]{%
\coordinate [label=left:$#2$] (#2) at #5;
\coordinate [label=below right:$#4$] (#4) at #6;
\coordinate [label=above:$#3$] (#3) at #7;

\draw 
  (#2) -- 
  node[auto] {$\MakeLowercase{#4}$} (#3) -- 
  node[auto] {$\MakeLowercase{#3}$} (#4) -- 
  node[auto] {$\MakeLowercase{#2}$} 
  (#2);

\coordinate (aux1) at
  ($ (#2) ! {sin(90)} ! 90:(#3) $);
\coordinate (aux2) at
  ($ (aux1) ! {sin(90)} ! 90:(#2) $);

\coordinate (aux3) at
  ($ (#2) ! {sin(90)} ! -90:(#4) $);
\coordinate (aux4) at
  ($ (aux3) ! {sin(90)} ! -90:(#2) $);

\coordinate (aux5) at
  ($ (#4) ! {sin(90)} ! -90:(#3) $);
\coordinate (aux6) at
  ($ (aux5) ! {sin(90)} ! -90:(#4) $);

\begin{scope}[#1]
\draw
  (#2) -- 
  (aux1) node[midway,auto,swap] {$\MakeLowercase{#4}$} -- 
  (aux2) node[midway,auto,swap] {$\MakeLowercase{#4}$} -- 
  (#3) node[midway,auto,swap] {$\MakeLowercase{#4}$};
\draw
  (#2) -- 
  (aux3) node[midway,auto] {$\MakeLowercase{#2}$} -- 
  (aux4) node[midway,auto] {$\MakeLowercase{#2}$}  -- 
  (#4) node[midway,auto] {$\MakeLowercase{#2}$};
\draw
  (#4) -- 
  (aux5) node[midway,auto] {$\MakeLowercase{#3}$} -- 
  (aux6) node[midway,auto] {$\MakeLowercase{#3}$} -- 
  (#3) node[midway,auto] {$\MakeLowercase{#3}$};
\end{scope}
}

\begin{document}

\begin{tikzpicture}
\PythTr{A}{B}{C}{(-1.5cm,-1.cm)}{(1.5cm,-1.0cm)}{(1.5cm,1.0cm)}
\end{tikzpicture}\par\bigskip

\begin{tikzpicture}
\PythTr[Maroon,dashed]{L}{M}{N}{(2,-2)}{(4,2)}{(0,2)}
\end{tikzpicture}

\end{document}

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

구성이 직사각형 삼각형으로 제한되어야 하는 경우 해당 버전은 다음과 같습니다.

\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\PythTri[7][ultra thick,green,text=black]{%
\coordinate [label=left:$#2$] (#2) at #5;
\coordinate [label=below right:$#4$] (#4) at #6;
\coordinate (aux) at ($ #5 ! 1 ! 90:#6 $);
\coordinate [label=above:$#3$] (#3) at ($ #5 !#7!(aux) $);

\draw 
  (#2) -- 
  node[auto] {$\MakeLowercase{#4}$} (#3) -- 
  node[auto] {$\MakeLowercase{#3}$} (#4) -- 
  node[auto] {$\MakeLowercase{#2}$} 
  (#2);

\coordinate (aux1) at
  ($ (#2) ! {sin(90)} ! 90:(#3) $);
\coordinate (aux2) at
  ($ (aux1) ! {sin(90)} ! 90:(#2) $);

\coordinate (aux3) at
  ($ (#2) ! {sin(90)} ! -90:(#4) $);
\coordinate (aux4) at
  ($ (aux3) ! {sin(90)} ! -90:(#2) $);

\coordinate (aux5) at
  ($ (#4) ! {sin(90)} ! -90:(#3) $);
\coordinate (aux6) at
  ($ (aux5) ! {sin(90)} ! -90:(#4) $);

\begin{scope}[#1]
\draw
  (#2) -- 
  (aux1) node[midway,auto,swap] {$\MakeLowercase{#4}$} -- 
  (aux2) node[midway,auto,swap] {$\MakeLowercase{#4}$} -- 
  (#3) node[midway,auto,swap] {$\MakeLowercase{#4}$};
\draw
  (#2) -- 
  (aux3) node[midway,auto] {$\MakeLowercase{#2}$} -- 
  (aux4) node[midway,auto] {$\MakeLowercase{#2}$}  -- 
  (#4) node[midway,auto] {$\MakeLowercase{#2}$};
\draw
  (#4) -- 
  (aux5) node[midway,auto] {$\MakeLowercase{#3}$} -- 
  (aux6) node[midway,auto] {$\MakeLowercase{#3}$} -- 
  (#3) node[midway,auto] {$\MakeLowercase{#3}$};
\end{scope}
}

\begin{document}

\begin{tikzpicture}[scale=0.75]
\PythTri{A}{B}{C}{(0,4)}{(2,0)}{3cm}
\end{tikzpicture}\par\bigskip

\begin{tikzpicture}[scale=0.75]
\PythTri[Maroon,dashed]{L}{M}{N}{(0,0)}{(4,0)}{3cm}
\end{tikzpicture}\par\bigskip

\end{document}

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

이제 명령에는 다음 구문이 있습니다.

\PythTri[<options>]{<name1>}{<name2>}{<name3>}{<coord1>}{<coord2>}{<length>}

where <coord1><coord2>는 카테투스 중 하나의 좌표이고 여섯 번째 필수 인수는 이제 다른 카테투스의 길이에 사용됩니다.

초기 버전:

라이브러리를 사용하는 한 가지 옵션 calc:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}[scale=1.25]
  \coordinate [label=left:$C$] (A) at (-1.5cm,-1.cm);
  \coordinate [label=right:$A$] (C) at (1.5cm,-1.0cm);
  \coordinate [label=above:$B$] (B) at (1.5cm,1.0cm);

\draw 
  (A) -- 
  node[above] {$a$} (B) -- 
  node[right] {$c$} (C) -- 
  node[below] {$b$} 
  (A);
\draw 
  (1.25cm,-1.0cm) rectangle (1.5cm,-0.75cm);
\draw[ultra thick,green] 
  let \p1= ( $ (C)-(A) $ )
  in (A) -- 
  ++(-90:{veclen(\x1,\y1)}) --       
  ++(0:{veclen(\x1,\y1)}) --       
  ++(90:{veclen(\x1,\y1)});     
\draw[ultra thick,green] 
  let \p1= ( $ (B)-(C) $ )
  in (B) -- 
  ++(0:{veclen(\x1,\y1)}) --       
  ++(-90:{veclen(\x1,\y1)}) --       
  ++(180:{veclen(\x1,\y1)});     
\coordinate (aux1) at
  ($ (A) ! {sin(90)} ! 90:(B) $);
\coordinate (aux2) at
  ($ (aux1) ! {sin(90)} ! 90:(A) $);
\draw[ultra thick,green]
  (A) -- (aux1) -- (aux2) -- (B);
\end{tikzpicture}
    
\end{document}

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

답변3

아름다운을 사용하는 또 다른 옵션은 다음과 같습니다.tkz-euclide패키지(코드는 문서의 예제를 변형한 것임):

\documentclass{article}
\usepackage{tkz-euclide}
\usetkzobj{all}

\begin{document}

\begin{tikzpicture}
\tkzInit
\tkzDefPoint(0,0){C}
\tkzDefPoint(4,0){A}
\tkzDefPoint(0,3){B}
\tkzDefSquare(B,A)\tkzGetPoints{E}{F}
\tkzDefSquare(A,C)\tkzGetPoints{G}{H}
\tkzDefSquare(C,B)\tkzGetPoints{I}{J}
\tkzFillPolygon[fill = red!50 ](A,C,G,H)
\tkzFillPolygon[fill = blue!50 ](C,B,I,J)
\tkzFillPolygon[fill = green!50](B,A,E,F)
\tkzFillPolygon[fill = orange,opacity=.5](A,B,C)
\tkzDrawPolygon[line width = 1pt](A,B,C)
\tkzDrawPolygon[line width = 1pt](A,C,G,H)
\tkzDrawPolygon[line width = 1pt](C,B,I,J)
\tkzDrawPolygon[line width = 1pt](B,A,E,F)
\tkzLabelSegment[auto](A,C){$a$}
\tkzLabelSegment[auto](C,G){$a$}
\tkzLabelSegment[auto](G,H){$a$}
\tkzLabelSegment[auto](H,A){$a$}
\tkzLabelSegment[auto](C,B){$b$}
\tkzLabelSegment[auto](B,I){$b$}
\tkzLabelSegment[auto](I,J){$b$}
\tkzLabelSegment[auto](J,C){$b$}
\tkzLabelSegment[auto](B,A){$c$}
\tkzLabelSegment[auto](F,B){$c$}
\tkzLabelSegment[auto](E,F){$c$}
\tkzLabelSegment[auto](A,E){$c$}
\end{tikzpicture}

\end{document}

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

답변4

사용자가 해야 할 일은 카테티의 길이( 각각 \lengthA및 값 \lengthB)를 선택하는 PSTricks 솔루션입니다.

\documentclass{article}

\usepackage{pst-eucl,pstricks-add}
\usepackage{xfp}

\newcommand*\maxHori{\fpeval{\lengthA+2*\lengthB}}
\newcommand*\maxVert{\fpeval{2*\lengthA+\lengthB}}

% labels
\def\Label[#1]#2#3{%
  \pcline[linestyle = none, offset = -8pt](#2)(#3)
  \ncput{$#1$}}

% lengths of the catheti
\def\lengthA{3 }
\def\lengthB{2 }


\begin{document}

\begin{pspicture}(\maxHori,\maxVert)
\psset{dimen = middel, fillstyle = solid}
  \pnodes%
    (\fpeval{\lengthA+\lengthB},\fpeval{\lengthA+\lengthB}){A}%
    (\lengthB,\lengthA){B}%
    (\fpeval{\lengthA+\lengthB},\lengthA){C}%
    (\lengthB,0){a1}%
    (\fpeval{\lengthA+\lengthB},0){a2}%
    (\fpeval{\lengthA+2*\lengthB},\fpeval{\lengthA+\lengthB}){b1}%
    (\fpeval{\lengthA+2*\lengthB},\lengthA){b2}%
    (0,\fpeval{2*\lengthA}){c1}%
    (\lengthA,\fpeval{2*\lengthA+\lengthB}){c2}
  \psframe[fillcolor = red!70](a1)(C)
  \psframe[fillcolor = blue!70](C)(b1)
  \pspolygon[fillcolor = yellow!70](B)(c1)(c2)(A)
  \pspolygon[fillcolor = green!70](A)(C)(B)
  \pstRightAngle[RightAngleSize = 0.3, fillstyle = solid, fillcolor = green!70]{A}{C}{B}
  \uput[60](A){$A$}
  \uput[210](B){$B$}
  \uput[315](C){$C$}
  \Label[a]{a1}{B}
  \Label[a]{B}{C}
  \Label[a]{C}{a2}
  \Label[a]{a2}{a1}
  \Label[b]{C}{A}
  \Label[b]{A}{b1}
  \Label[b]{b1}{b2}
  \Label[b]{b2}{C}
  \Label[c]{B}{c1}
  \Label[c]{c1}{c2}
  \Label[c]{c2}{A}
  \Label[c]{A}{B}
\end{pspicture}

\end{document}

출력2

관련 정보