Я только начинаю разбираться с сеткой точек Tikz и мне удалось нарисовать треугольники с помощью этого метода, но есть ли способ рисовать, напрямую вводя длины линий и углы?
Например, если бы мне нужны были углы 125 градусов, 40 градусов и 15 градусов с гипотенузой 15 см, как бы я это задал?
решение1
Для сравнения, вот альтернативный метод с использованием Metapost. (Код — это код ConTeXt, но вы также можете использовать код Metapost в LaTeX, используя пакет gmp
).
В Metapost неизвестные числовые значения могут быть указаны с помощью whatever
ключевого слова. Metapost вычисляет значение whatever
s так, чтобы все уравнения были удовлетворены.
Давайте обозначим вершины треугольника как A
, B
и C
. Предположим, мы хотим нарисовать AB
так, чтобы он был параллелен оси x, AC
был гипотенузой, а угол A
был 40, а угол B
был 125. (Угол C
автоматически будет 15). Мы можем указать это в Metapost как:
numeric angleA, angleB;
angleA := 40;
angleB := 125;
numeric AC;
AC := 15cm;
Мы выбираем точку A
как начало координат. Затем точка C
полностью определена
pair A, B, C;
A := origin;
C := (AC,0) rotated angleA;
Чтобы указать точку B
, мы приводим два уравнения для B
. Первое — это B
должно быть AB
расстояние от A
вдоль оси x, т.е.
B = (whatever, 0);
Во-вторых, это CB
должно быть под углом B
, т.е.
B = ((whatever,0) rotated -angleB) shifted C;
Metapost находит последовательное решение для этих двух спецификаций. Вот полный код:
\starttext
\startMPpage[offset=3mm]
begingroup;
numeric angleA, angleB, angleC;
angleA := 40;
angleB := 125;
numeric AC;
AC := 15cm;
pair A, B, C;
A := origin;
C := (AC,0) rotated angleA;
% Let Metapost figure out B.
B = (whatever, 0);
B = ((whatever,0) rotated -angleB) shifted C;
path triangle ;
triangle := A -- B -- C --cycle;
draw triangle;
pair c; c := center triangle;
freedotlabel("$A$", A, c);
freedotlabel("$B$", B, c);
freedotlabel("$C$", C, c);
endgroup;
\stopMPpage
\stoptext
который дает
решение2
Так?
\documentclass[margin=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\def\angf{40} %First angle
\def\angs{125} %Second angle
\def\hypo{15} %Hypotenus
\coordinate (O) at (0,0);
\draw[name path=line 1] (O) --++ (\angf:\hypo) coordinate (A);
\path[name path=line 2] (O) --++ (0:2\hypo);
\path[name path=line 3] (A) --++ (-\angs:2\hypo);
\path [name intersections={of=line 2 and line 3,by=E}];
\pgfresetboundingbox
\draw (O)--(E)--(A);
\end{tikzpicture}
\end{document}
решение3
Знай свою математику!
Соотношения между углами и длинами задаются формулойзакон синусов.
Выход
Код
\documentclass[12pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[scale=.5]
% "hypothenuse"
\def\A{15}
% the angles
\def\angA{125}
\def\angB{40}
\pgfmathsetmacro{\angC}{180-\angA-\angB}
% the law of sines
\pgfmathsetmacro{\d}{\A/sin(\angA)}
\pgfmathsetmacro{\C}{\d*sin(\angC)}
\draw (0,0) -- (\angB:\A) -- (0:\C) -- cycle;
\end{tikzpicture}
\end{document}