TikZ:通过在斜边上加垂直线来绘制矩形三角形

TikZ:通过在斜边上加垂直线来绘制矩形三角形

我得到了环境中的点 A、B 和 X tikzpicture,如下所示:

\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (3.6,0);
  \coordinate (X) at (2,0);
\end{tikzpicture}

现在我想构建坐标 C,如下图所示:三角形

使用圆和直尺,我将在 X 方向上在 AB 上画一条垂线,并将其与以 AB 为直径的圆相交。我确信在 TikZ 中有一种简洁的方法可以做到这一点(无需手动进行任何坐标计算)。然而,浏览(大量)文档后,我找不到直接的答案。

为了可移植性,我希望有一个纯 TikZ 解决方案(不带tkz-euclide包)。

编辑

为了澄清:我试图用“干净的方式”来表达我想告诉 TikZ“我的意思”。例如:引入线段 [AB] 的中点 O 是可以的,同时说 C 和 O 的距离应该与 A 和 O 的距离相同。但直接计算坐标,例如基于几何平均定理或三角函数应避免。

快速检查:如果您的代码中有一些函数,如sqrtatan等,那么它可能不是我要找的。此外,如果我改变 A、B 和 X 的起始坐标,您的代码应该仍然有效(尽管它们应该仍然在一条公共线上,但这条线可能不再是水平的。)

答案1

这里有一个解决方案intersections。图像的边框用 固定clip。我仍在寻找没有辅助线的解决方案,找到后会通知您。

目前您必须使用clip并手动进行调整。

\documentclass[tikz, border=0mm]{standalone}

\usetikzlibrary{calc, intersections, through}

\begin{document}
  \begin{tikzpicture}
    \coordinate (a) at (0,0);
    \coordinate (b) at (3.6,0);
    \coordinate (x) at (2,0);

    \begin{scope}
      \clip (0,-.01) rectangle (3.6,1.8);
      \path [name path=px] (x) -- ++(90:2cm);
      \node at ($(a)!.5!(b)$) [name path=pc, circle through={(a)}] {};
      \draw [name intersections={of=px and pc}] (a) -- (intersection-1) -- (b) -- cycle;
    \end{scope}
  \end{tikzpicture}
\end{document}

更新:

这里是另一段使用该let命令结合的代码intersections

\documentclass[tikz, border=6mm]{standalone}

\usetikzlibrary{calc, intersections}

\begin{document}
  \begin{tikzpicture}
    \coordinate [label={180:$A$}] (a) at (0,0);
    \coordinate [label={0:$B$}] (b) at (3.6,0);
    \coordinate [label={-90:$X$}] (x) at (2,0);

    \draw [dashed] let \p1 = ($(b)-(a)$) in [name path=pa] (a) arc (180:0:\x1/2);
    \draw [dashed] let \p1 = ($(b)-(a)$) in [name path=px] (x) |- ($(x)+(90:\x1/2)$);
    \draw [name intersections={of=pa and px}] (a) -- (intersection-1) node [label={90:$C$}] {} -- (b) -- cycle;
  \end{tikzpicture}
\end{document}

渲染图像

更新:

根据要求提供更多信息:

let命令

使用let命令,您可以使用点寄存器\p[n]) 或者数字寄存器\n[n])用于绘制路径。我使用\p1现有点的路径计算来计算点(),并在命令的绘图部分(之后)重用xy坐标(\x1, ) 。\y1in

let命令还在14.15(第 161 页)中进行了描述pgfmanual 3.0

协调 (c)

调整最后一个\draw命令,使其coordinate在交叉点处添加一个(intersection-1)名为(c)。这样,您就可以获得坐标,并可以在代码中通过调用它来访问它。

\draw [name intersections={of=pa and px}] (a) -- (intersection-1) coordinate (c) node [label={90:$C$}] {} -- (b) -- cycle;

答案2

calc另一种疯狂的选择

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \coordinate[label=180:$A$] (A) at (0,0);
  \coordinate[label=0:$B$] (B) at (3.6,0);
  \coordinate[label=270:$X$] (X) at (0.5,0);
  \coordinate (O) at ($(A)!0.5!(B)$);
  \draw (A) let \p1=($(B)-(A)$),\p2=($(O)-(X)$),\n1={acos(2*\x2/\x1)} in 
       arc (180:0:0.5*\x1) ($(O)!1!-\n1:(A)$) 
       coordinate[label=90:$C$] (C) --(X);
\draw (A) -- (B) -- (C) -- cycle;
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

虽然 OP 需要一个不使用的解决方案tkz-euclide,我认为这可能对其他人有用:

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

\begin{document}

\begin{tikzpicture}
% Initial points A,B, X, O
\tkzDefPoint(0,0){A}
\tkzDefPoint(2,0){X}
\tkzDefPoint(8,0){B}
\tkzDefPoint(4,0){O}
% The arc
\tkzDrawArc[dashed,color=gray!60,thin](O,B)(A)
% Finding C
\tkzDefLine[orthogonal=through X](A,X){O}
\tkzInterLC[R](X,tkzPointResult)(O,4cm)
\tkzGetSecondPoint{C}
% Drawing lines
\tkzDrawSegments(X,C A,B A,C C,B)
% Adding labels
\tkzDrawPoints(A,B,X,O,C)
\tkzLabelPoints(A,B,X,O)
\tkzLabelPoints[above](C)
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案4

编辑:警告已删除。如果两者欧几里得和埃格雷格说这是真的,这一定是真的。


这是一个不需要额外库的解决方案。

我的解决方案利用了这样一个事实:AB 是圆的直径,而 C 是圆周上的一个点。这意味着角 CAB 等于角 BCX,因为 ACB 是直角。所以 tan CAB 等于 CX/AX,而 tan BCX 等于 (AB-AX)/CX。因此 CX/AX = (AB-AX)/CX。由于 AB 和 AX 已知,我们可以解出 CX = AX(AB-AX) 的根。

\documentclass[tikz,border=5pt]{standalone}

\begin{document}
\begin{tikzpicture}
  [circle radius/.store in=\myradius, circle radius=1.8, my length/.store in=\myl, my length=2]
  \coordinate (A) at (0,0);
  \coordinate (B) at (2*\myradius,0);
  \coordinate (X) at (\myl,0);
  \coordinate (C) at (\myl,{sqrt(\myl*(2*\myradius - \myl))});
  \draw [densely dashed, gray] (A) arc (180:0:\myradius);
  \draw (A) node [left] {$A$} -- (B) node [right] {$B$} -- (C) node [above] {$C$} edge node [below, pos=1] {$X$} (X) -- cycle;
\end{tikzpicture}
\end{document}

垂直下降

相关内容