我刚刚开始了解 tikz 点网格,并设法用这种方法绘制三角形,但是有没有办法可以通过直接输入线长和角度来绘制?
例如,如果我想要 125 度、40 度和 15 度的角度,斜边为 15 厘米,我该如何设置?
答案1
为了进行比较,这里有一个使用 Metapost 的替代方法。(代码是 ConTeXt 代码,但您也可以使用该gmp
包在 LaTeX 中使用 metapost 代码)。
在 Metapost 中,可以使用关键字指定未知数值whatever
。Metapost 会计算出 s 的值,whatever
以便满足所有方程式。
我们将三角形的顶点标记为A
、B
和C
。假设我们要绘制AB
与 x 轴平行的 ,AC
为斜边, 为角度A
,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
应该是沿 x 轴AB
的距离,即A
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}