晚上在做下面这个图,看起来很简单,但最后居然还是用自己的想法没有做出来。后来用腾讯元宝做了个近似的出来。
我的构思如下:
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
来绘制,应该是什么样的思路。
三角形高或者从某点到一条线的高绘制方法有哪些。
谢谢!附件如后。
\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}
name=H
意味着得到的垂直实际上名为Ha
、Hb
与Hc
...
\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}
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$}
查看报错信息,为什么只有D
和E
找不到,看看这两个点是在\tkzDefSpcTriangle
里定义的,回去翻\tkzDefSpcTriangle
的文档:
(此事在文档中亦有记载...)
AE=BE
...这里的E点如果直接用AE=BE
个人觉得会稍显复杂,因为衡量长度似乎稍显代码冗长....
条条大道通罗马...
\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}
不过这似乎不太直角...
再看看「点A」应该如何定位吧...
嗯,显然∠BAC是45°,对于(-1.5,0) (1.5,0)和(0,4)用余弦定理理论上这个角不是45°,所以要想完全精确最好是不要直接给定ABC的坐标,应该另谋他路来「用最少的点唯一确定这个图形」...
未完待续....
取巧的办法:
不难注意到:
tan22.5° = √2-1
cot22.5°= √2+1
所以令
A(0,1.5*(sqrt(2)+1))
即可当然,这对数学要求较高,需要记住一些三角函数值...
不过就这个例子而言,为了方便BC水平摆放,BC是要先确定的,而顶角为45°又直接唯一确定了A,所以似乎用这个三角函数是最直接的(?) 换句话讲,这道题中「A点是不能让你自由放置的,隐含的角度关系隐式限制了绘图的自由度」...
如果从倾斜放置的三角形ABC是等腰直角开始画,似乎很难保证BC水平...
蹲蹲有无更好的准确定位思路...
我觉得最直接的就是
projection
?当然如果你的最终目标是垂心,那用你源代码中的
\tkzDefSpcTriangle[ortho,name=P](A,B,C){D,E,F}
显然是更快更方便的...@u70550 不是因为目标是重心而这样绘制的啊,是在翻书的时候看到你最上面提到的那张书里面图的例子。工具书可能需要再慢慢来熟悉去哪里找想要的答案。不过这几天觉得绘图还是一个很有趣的事,以前用手来画图的时候,思考都没有这么多。可惜的是,年纪大了,思考的能力和精力下降太多了。叹口气。
@u70550
\tkzDefPointBy...
,定义某个点通过某个操作,这样理解句子,我好像才能用到绘图里面去。无法得心应手的使用宏包应该与没有把工具书中的词句“翻译”成熟悉的语言呢。要是有大佬们翻译这类书或者写这类书的时候,能够注释出来这些朴素的翻译,应该会更利于学习者掌握。O(∩_∩)O哈哈~@u10189 其实我也是上下翻找了一会儿才找到的这个
projection
方法的,你也可以尝试把文档喂给ai让他帮你找找,但是 自己一定要返回文档原文做验证 。其实入门更直接的方法是「找到手册中哪里可以直接用于你目前的需求」,把他例子里的代码复制一下,自己弄懂,然后用到你自己的图里去。事实上不太需要"翻译",因为这些命令名称是「自解释的」:
\tkzDefPointBy
:定义某个点通过某个操作\tkzDrawSegments
:一次性绘制多条线段\tkzInterLL
: tkz - Intersection - Line Line 线线交点在你的上一个提问的评论区,我也贴了文档的(过时)的中译版,可以供你比较快速了解有哪些功能,实际上你要绘制的「初中数学题」构图都相对简单,多多练习很快就能上手的~
@u70550 是说把那个工具书的文档放在 AI 中,然后再用自然语言问它我们想要的问题么?那倒是真可以试试。
另有一个问题困扰我许久,编译时出现警告,但还是能编译出来。
就是把这些单个绘制的图放在整体的
Tex
中时会出现这样的状况。是的,可以提高查阅速度,提供一些思路
这是字体和编译引擎的问题,和图片没什么关系,目测与
fandol
字体以及fourier-otf
有关,只看报错信息无法debug,如果确实想要消除此警告,给可以复现问题的代码开新的问题。另外,建议为每一张图片新建一个文件夹,其中的
.tex
使用standalone
作为文档类,这样每一张图片都将得到一个.pdf
文件,在主文件main.tex
中\includegraphics
即可。若如此做,各个「画图」与「试卷正文排版」模块间互相独立,更方便管理。