10 三角形中高的绘制方法

发布于 2025-07-30 22:16:39

晚上在做下面这个图,看起来很简单,但最后居然还是用自己的想法没有做出来。后来用腾讯元宝做了个近似的出来。

image.png

我的构思如下:

  1. 做一个等腰三角形;
  2. 找到三条高的交点;
  3. 然后有选择的绘制其中的高;
  4. 题目中要求的AE=BE,通过微调顶点A的坐标,得到肉眼近似相等。

但按照上面的方法绘制近似的图形,最后报错了。

Package pgf Error: No shape named `D' is known. ^^I^^I\tkzLabelPoint[below](D){$D$}
Package pgf Error: No shape named `E' is known. ^^I^^I\tkzLabelPoint[right](E){$E$}

想请教下大佬们报错的原因以及怎么应该怎么改正?

另外如果想要精确地按照题目中的要求AE=BE来绘制,应该是什么样的思路。

三角形高或者从某点到一条线的高绘制方法有哪些。

谢谢!附件如后。

005.tex

\documentclass[tikz, border=5mm]{standalone}
\usepackage{tkz-euclide}
%\usetkzobj{all} % 解决命令未定义问题 - 加载所有对象类型
\usetikzlibrary{angles, quotes} % 用于绘制角度标记

\begin{document}
    \begin{tikzpicture}[scale=0.8]
        % 定义三个顶点
        \tkzDefPoints{-1.5/0/B, 1.5/0/C, 0/4/A}
        % 定义垂心
        \tkzDefTriangleCenter[ortho](A,B,C)
        \tkzGetPoint{P}
        % 定义三个垂足
        \tkzDefSpcTriangle[ortho,name=P](A,B,C){D,E,F}
        % 画三角形ABC,画三个顶点,连三条高线
        \tkzDrawPolygon[thick][color=blue](A,B,C)
%        \tkzDrawPoints(A,B,C,P)
%        \tkzDrawSegments[thick](A,PD B,PE C,Pc)
        \tkzDrawSegments[thick](A,PD B,PE)
        % 添加标签
        \tkzLabelPoint[above left](P){$P$}
        \tkzLabelPoint[above](A){$A$}
        \tkzLabelPoint[below left](B){$B$}
        \tkzLabelPoint[below right](C){$C$}
        \tkzLabelPoint[below](D){$D$}
        \tkzLabelPoint[right](E){$E$}
%        \tkzAutoLabelPoints[center=P](A,B,C)        
    \end{tikzpicture}
\end{document}

查看更多

关注者
0
被浏览
205
Sagittarius Rover
Sagittarius Rover 2025-07-30
我要成为Typst糕手/(ㄒoㄒ)/~~

很棒!学以致用!

也许从下面这个例子里可以找到原因:

image.png

name=H意味着得到的垂直实际上名为HaHbHc...

\documentclass[tikz, border=5mm]{standalone}
\usepackage{tkz-euclide}
%\usetkzobj{all} % 解决命令未定义问题 - 加载所有对象类型
\usetikzlibrary{angles, quotes} % 用于绘制角度标记

\begin{document}
    \begin{tikzpicture}[scale=0.8]
        % 定义三个顶点
        \tkzDefPoints{-1.5/0/B, 1.5/0/C, 0/4/A}
        % 定义垂心
        \tkzDefTriangleCenter[ortho](A,B,C)
        \tkzGetPoint{P}
        % 定义三个垂足
        \tkzDefSpcTriangle[ortho,name=P](A,B,C){D,E,F}
        % 画三角形ABC,画三个顶点,连三条高线
        \tkzDrawPolygon[thick][color=blue](A,B,C)
%        \tkzDrawPoints(A,B,C,P)
%        \tkzDrawSegments[thick](A,PD B,PE C,Pc)
        \tkzDrawSegments[thick](A,PD B,PE)
        % 添加标签
        \tkzLabelPoint[above left](P){$P$}
        \tkzLabelPoint[above](A){$A$}
        \tkzLabelPoint[below left](B){$B$}
        \tkzLabelPoint[below right](C){$C$}
        \tkzLabelPoint[below](PD){$D$}
        \tkzLabelPoint[right](PE){$E$}
%        \tkzAutoLabelPoints[center=P](A,B,C)        
    \end{tikzpicture}
\end{document}

image.png


如何debug?

Package pgf Error: No shape named `D' is known. ^^I^^I\tkzLabelPoint[below](D){$D$}
Package pgf Error: No shape named `E' is known. ^^I^^I\tkzLabelPoint[right](E){$E$}

查看报错信息,为什么只有DE找不到,看看这两个点是在\tkzDefSpcTriangle里定义的,回去翻\tkzDefSpcTriangle的文档:

(此事在文档中亦有记载...)

image.png


关于如何精确让AE=BE...

这里的E点如果直接用AE=BE个人觉得会稍显复杂,因为衡量长度似乎稍显代码冗长....

条条大道通罗马...

第一个思路:「高+等腰=等腰直角大概可以想到中垂线」

  • 确定A、B、C
  • 作高AD⊥BC
  • 作AB上的中垂线交AC于E
\documentclass[tikz,border=5mm]{standalone}
\usepackage{tkz-euclide}
\usetikzlibrary{angles}
\begin{document}
    \begin{tikzpicture}[line cap=round,line join=round]
        \tkzDefPoints{-1.5/0/B, 1.5/0/C, 0/4/A}
        \tkzDefPointBy[projection = onto B--C](A)
        \tkzGetPoint{D}

        \tkzDefLine[mediator](A,B)
        \tkzGetPoints{P1}{P2}
        \tkzInterLL(A,C)(P1,P2) 
        \tkzGetPoint{E}

        \tkzInterLL(A,D)(B,E) 
        \tkzGetPoint{P}

        \tkzDrawSegments[thick](A,D B,E)
        \tkzDrawPolygon[semithick](A,B,C)
 
        \tkzLabelPoint[above](A){$A$}
        \tkzLabelPoint[below left](B){$B$}
        \tkzLabelPoint[below right](C){$C$}
        \tkzLabelPoint[below](D){$D$}
        \tkzLabelPoint[right](E){$E$}
    \end{tikzpicture}
\end{document}

image.png

不过这似乎不太直角...

再看看「点A」应该如何定位吧...

嗯,显然∠BAC是45°,对于(-1.5,0) (1.5,0)和(0,4)用余弦定理理论上这个角不是45°,所以要想完全精确最好是不要直接给定ABC的坐标,应该另谋他路来「用最少的点唯一确定这个图形」...


未完待续....

4 个回答
Balance
Balance 2025-07-31
这家伙很懒,什么也没写!

最开始您回复,修改我没有定义「D」「E」的那个地方,后面提供的修改代码,我好像没有看出来区别,是该加什么句子,但是就画出来图了。可以指点下具体增加哪句代码么。感谢!

海波
海波 2025-08-03
这家伙很懒,什么也没写!

其实对于想完整的画出图形,准确的画出图形,应该是分析完图形的性质之后再进行动手。很明显三角形ABC是等腰三角形,顶角是45度,两个底角是67.5度。在这个基础之上很容易就画出了高。
绘图的事项画出底边BC(此处直接指出顶点b和顶点c的坐标),再画出顶点A(下面给出一个计算的方法得到,也可以通过旋转的方式得到,还可以通过画中垂线的形式得到。方法太多了),最后画出两条高。

\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}

\begin{tikzpicture}[scale=1.2]
    % 设置点B和点C
    \tkzDefPoint(0,0){B}
    \tkzDefPoint(10,0){C}
    
    % 计算点A的坐标(使用角度和三角函数)
    % 角B = 67.5度,边BC = 10
    % AB = BC * sin(C) / sin(A)
    % 角A = 180 - 67.5 - 67.5 = 45度
    \pgfmathsetmacro{\angleA}{45}
    \pgfmathsetmacro{\angleB}{67.5}
    \pgfmathsetmacro{\angleC}{67.5}
    \pgfmathsetmacro{\AB}{10*sin(\angleC)/sin(\angleA)}
    \pgfmathsetmacro{\Ax}{\AB*cos(\angleB)}
    \pgfmathsetmacro{\Ay}{\AB*sin(\angleB)}
    \tkzDefPoint(\Ax,\Ay){A}
    
    % 绘制三角形ABC
    \tkzDrawPolygon(A,B,C)
    
    % 标记点
    \tkzLabelPoints[below left](B)
    \tkzLabelPoints[below right](C)
    \tkzLabelPoints[above](A)
    
    % 绘制高AD(从A到BC的垂线)
    \tkzDefPointBy[projection=onto B--C](A) \tkzGetPoint{D}
    \tkzDrawSegment[dashed](A,D)
    \tkzLabelPoints[below](D)
    \tkzMarkRightAngle(A,D,C)
    
    % 绘制高BE(从B到AC的垂线)
    \tkzDefPointBy[projection=onto A--C](B) \tkzGetPoint{E}
    \tkzDrawSegment[dashed](B,E)
    \tkzLabelPoints[above right](E)
    \tkzMarkRightAngle(B,E,C)
    
    % 标记角度【根据这个题的图,这个命令标度角是可以不需要的】
    \tkzMarkAngle[size=0.8](C,B,A)
    \tkzLabelAngle[pos=1.1](C,B,A){$67.5^\circ$}
    \tkzMarkAngle[size=0.9](A,C,B)
    \tkzLabelAngle[pos=1.2](A,C,B){$67.5^\circ$}
\end{tikzpicture}

\end{document}

这几天几个提问画图的题,应该是先看一下原版的说明书,(已经有大致的中文版了,也在网站里面),然后有了思想之后再来想。

做图就会快很多。

贸然去想的话,不知道绘图软件的一些必要的的一些想法,很难想到一些解决方案。

海波
海波 2025-08-03
这家伙很懒,什么也没写!

方法二

以下是使用  tkz-euclide  绘制等腰三角形 ABC 的 LaTeX 代码,其中:

点 B (0,0),点 C (10,0)

角 B = 角 C = 67.5°

角 A = 45°

绘制底边 BC、中垂线、点 A

连接 AC

绘制高 AD 和 BE

\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}

\begin{tikzpicture}[scale=1.2]

    % 定义点B和点C
    \tkzDefPoint(0,0){B}
    \tkzDefPoint(10,0){C}

    % 绘制底边BC
    \tkzDrawSegment(B,C)
    \tkzLabelPoints[below left](B)
    \tkzLabelPoints[below right](C)

    % 绘制BC的中垂线
    \tkzDefMidPoint(B,C) \tkzGetPoint{M}
    \tkzDefLine[orthogonal=through M](B,C) \tkzGetPoint{M'}
    \tkzDrawLine[add=0 and 8](M,M') % 延长中垂线

    % 在B点构造67.5度角,与中垂线交于点A
    \tkzDefLine[bisector](C,B,M') \tkzGetPoint{b} % 构造角平分线辅助点
    \tkzDefShiftPoint[B](\angleB:10){A'} % 临时点用于构造角度
    \tkzInterLL(B,A')(M,M') \tkzGetPoint{A}
    \tkzDrawPoints(A)
    \tkzLabelPoints[above](A)

    % 绘制三角形ABC
    \tkzDrawPolygon(A,B,C)

    % 绘制高AD(从A到BC的垂线)
    \tkzDefPointBy[projection=onto B--C](A) \tkzGetPoint{D}
    \tkzDrawSegment[dashed](A,D)
    \tkzLabelPoints[below](D)
    \tkzMarkRightAngle(A,D,C)

    % 绘制高BE(从B到AC的垂线)
    \tkzDefPointBy[projection=onto A--C](B) \tkzGetPoint{E}
    \tkzDrawSegment[dashed](B,E)
    \tkzLabelPoints[above right](E)
    \tkzMarkRightAngle(B,E,C)

    % 标记角度
    \tkzMarkAngle[size=0.8](C,B,A)
    \tkzLabelAngle[pos=1.1](C,B,A){$67.5^\circ$}
    \tkzMarkAngle[size=0.9](A,C,B)
    \tkzLabelAngle[pos=1.2](A,C,B){$67.5^\circ$}
    \tkzMarkAngle[size=1.0](B,A,C)
    \tkzLabelAngle[pos=1.3](B,A,C){$45^\circ$}

\end{tikzpicture}

\end{document}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览