나는 이전 질문과 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}