Возможно ли изменить код так, чтобы просто указать точки A, B и C, затем нарисовать прямой угол из C, просто указав длину, и найти точку D, затем, указав угол и длину, найти точку E и нарисовать отрезки.
\documentclass{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(3,0){B}
\tkzDefPoint(1.5,0){C}
\tkzDefPoint(1.5,2){D}
\tkzDefPoint(2,3){E}
\tkzDrawSegments(A,B C,D)
\tkzDrawSegment[color=red](C,E)
\tkzLabelPoint[left](A){$A$}
\tkzLabelPoint[right](B){$B$}
\tkzLabelPoint[below](C){$C$}
\tkzLabelPoint[above](D){$D$}
\tkzLabelPoint[above](E){$E$}
\tkzDrawPoints[fill=gray](A,B,C,D,E)
\end{tikzpicture}
\end{document}
решение1
Мы можем разместить точки D с помощью:
- поворот центра C и угла pi/2 точки B, получаем B'
- нарисуйте полупрямую BB'
- нарисуйте окружность с центром C и радиусом 2
- точка пересечения - точка D
Аналогично поступаем с точкой E.
У нас есть в tkz-euclide
:
\tkzDefPointBy[rotation=center C angle 90](B)
\tkzDefCircle[R](C,2)
\tkzInterLC
Мы также можем использовать tkz-elements
, требует компиляции вlualatex
% !TeX TS-program = lualatex
\documentclass{article}
\usepackage{tkz-elements}
\usepackage{tkz-euclide}
\begin{document}
\begin{tkzelements}
local lengthCD = 2
local lengthCE = 3
local angBCE = math.pi/3
z.A = point: new (0,0)
z.B = point: new (3,0)
L.AB = line : new (z.A,z.B)
z.C = L.AB.mid
--
z.Bp = z.C : rotation (math.pi/2,z.B)
L.CBp = line : new (z.C,z.Bp)
C.CD = circle : radius (z.C,lengthCD)
z.D,_ = intersection (L.CBp,C.CD)
--
z.Bpp = z.C : rotation (angBCE,z.B)
L.CBpp = line : new (z.C,z.Bpp)
C.CE = circle : radius (z.C,lengthCE)
z.E,_ = intersection (L.CBpp,C.CE)
\end{tkzelements}
\begin{tikzpicture}
\draw[help lines](0,0)grid(3,4);
\tkzGetNodes
\tkzDrawSegments(A,B C,D)
\tkzDrawSegment[color=red](C,E)
\tkzLabelPoint[left](A){$A$}
\tkzLabelPoint[right](B){$B$}
\tkzLabelPoint[below](C){$C$}
\tkzLabelPoint[above](D){$D$}
\tkzLabelPoint[above](E){$E$}
\tkzDrawPoints[gray](A,...,E)
\end{tikzpicture}
\end{document}
решение2
Ваша проблема решается просто с помощью tikz
библиотеки calc
:
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
every node/.style = {circle, fill=gray, inner sep=1pt, outer sep=0pt},
every label/.append style = {text=black}
]
\node[label= left:$A$] (a) at (0,0) {};
\node[label=right:$B$] (b) at (3,0) {};
\draw (a) -- (b);
\node[label=below:$C$] (c) at (1.5,0) {};
% line perpendicular to line a -- b from point c
\draw (c) -- ($(c)!20mm!90:(b)$) node[label=D] {};
% drawn with selected angle (for example 60 degree) from point c
\draw[red] (c) -- ($(c)!30mm!60:(b)$) node[label=E] {};
\end{tikzpicture}
\end{document}
или случай, когда линия a -- b не горизонтальна:
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
every node/.style = {circle, fill=gray, inner sep=1pt, outer sep=0pt},
every label/.append style = {text=black}
]
\node[label= left:$A$] (a) at (0,0) {};
\node[label=right:$B$] (b) at (3,1) {};
\draw (a) -- (b);
\node[label=below:$C$] (c) at ($(a)!0.5!(b)$) {};
%
\draw (c) -- ($(c)!20mm!90:(b)$) node[label=D] {};
%
\draw[red] (c) -- ($(c)!30mm!60:(b)$) node[label=E] {};
\end{tikzpicture}
\end{document}
решение3
Несомненно, синтаксис есть tkz-euclide
, но я не говорю по-французски, поэтому придерживаюсь Ti.кZ-методы.
На следующем изображении результаты реализации запрошенной альтернативной процедуры наложены на результаты исходного метода.
Очевидно, вам не нужны исходные точки или scope
замена старого кода новым.
Я не знаю, правильно ли я выбрал нужную точку для поиска E
, но вы можете адаптировать метод, чтобы взять любую нужную вам точку в качестве базы.
\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(3,0){B}
\tkzDefPoint(1.5,0){C}
\tkzDefPoint(1.5,2){D}
\tkzDefPoint(2,3){E}
\tkzDrawSegments(A,B C,D)
\tkzDrawSegment[color=red](C,E)
\tkzLabelPoint[left](A){$A$}
\tkzLabelPoint[right](B){$B$}
\tkzLabelPoint[below](C){$C$}
\tkzLabelPoint[above](D){$D$}
\tkzLabelPoint[above](E){$E$}
\tkzDrawPoints[fill=gray](A,B,C,D,E)
\begin{scope}[draw=blue,every label/.append style=blue]
\path (C) ++(0pt,2) coordinate [label=above:$D$] (d);
\path (d) ++(63:1.12) coordinate [label=above:$E$] (e);
\tkzDrawSegments(A,B C,d C,e)
\end{scope}
\end{tikzpicture}
\end{document}