10 tkz-euclide 宏包中如何获取未知角的度数并用在另一个角的绘制中

发布于 2025-08-22 11:12:27

在这个问题获取某线段长度用于绘制新的线段长度等于某线段中,@u70550 热情地回复了关于线段绘制的疑惑。

今天遇到了新的类似问题 —— 获取未知角的度数并用在另一个角的绘制中。

原草图如下:

image.png

绘制了一多半的代码如下:

\documentclass[border=5pt]{standalone}
\usepackage{tkz-euclide}

\begin{document}
    \begin{tikzpicture}[scale=1, font=\small]
        
        % ===== 定义点 =====
        \tkzDefPoints{0/0/C, 4/0/E}
        \tkzDefTriangle[two angles=23 and 37](C,E)
        \tkzGetPoint{B}
        
        \tkzDefPointBy[rotation=center B angle -90](C)
        \tkzGetPoint{A}
        \tkzDefPointBy[rotation=center B angle 90](E)
        \tkzGetPoint{D}
        
        \tkzCalcLength(B,D)
        \tkzGetLength{BDlen} 
        \tkzDefPointWith[linear normed, K=\BDlen](B,A) 
        \tkzGetPoint{G}
        
        \tkzFindAngle(A,D,G)
        \tkzGetAngle(angleADG)
        \tkzDefPointBy[rotation=center B angle \angleADG](A)
        \tkzGetPoint{f}
        \tkzInterLL(B,f)(A,D)
        \tkzGetPoint{F}
        

        % ===== 绘制图形 =====
        \tkzDrawPolygon[thick](B,C,E)
        \tkzDrawSegments[thick](A,B D,B A,C D,E A,D D,G B,F G,F)
        
    \end{tikzpicture}
\end{document}

获取未知角的度数并用在另一个角的绘制中出现了报错,查看了宏包的汉化说明,还是没有找到问题。再求助下大佬们。

image.png

报错信息为:

! Undefined control sequence.
\tkzangle ->\angleADG
                      
l.23 ...ntBy[rotation=center B angle \angleADG](A)

?

查看更多

关注者
0
被浏览
163
Sagittarius Rover
这家伙很懒,什么也没写!

先解决原始问题

image.png

注意

\tkzGetAngle(angleADG)

\tkzGetAngle{angleADG}

看文档的例子:

image.png

所以,你只要把\tkzGetAngle(angleADG)替换为\tkzGetAngle{angleADG}即可

\documentclass[border=5pt]{standalone}
\usepackage{tkz-euclide}

\begin{document}
    \begin{tikzpicture}
        
        % ===== 定义点 =====
        \tkzDefPoints{0/0/C, 4/0/E}
        \tkzDefTriangle[two angles=23 and 37](C,E)
        \tkzGetPoint{B}
        
        \tkzDefPointBy[rotation=center B angle -90](C)
        \tkzGetPoint{A}
        \tkzDefPointBy[rotation=center B angle 90](E)
        \tkzGetPoint{D}
        
        \tkzCalcLength(B,D)
        \tkzGetLength{BDlen} 
        \tkzDefPointWith[linear normed, K=\BDlen](B,A) 
        \tkzGetPoint{G}
        
        \tkzFindAngle(A,D,G)
        \tkzGetAngle{angleADG}%<-注意花括号
        \tkzDefPointBy[rotation=center B angle \angleADG](A)
        \tkzGetPoint{f}
        \tkzInterLL(B,f)(A,D)
        \tkzGetPoint{F}
        

        % ===== 绘制图形 =====
        \tkzDrawPolygon[thick](B,C,E)
        \tkzDrawSegments[thick](A,B D,B A,C D,E A,D D,G B,F G,F)
        
    \end{tikzpicture}
\end{document}

一个workaround:

如果只要用一次,那么也可以直接用\tkzAngleResult,这样可以不用再\tkzGetAngle多写一行...

image.png

\documentclass[border=5pt]{standalone}
\usepackage{tkz-euclide}
\begin{document}
    \begin{tikzpicture}[font=\small]
        % ===== 定义点 =====
        \tkzDefPoints{0/0/C, 4/0/E}
        \tkzDefTriangle[two angles=23 and 37](C,E)
        \tkzGetPoint{B}
        
        \tkzDefPointBy[rotation=center B angle -90](C)
        \tkzGetPoint{A}
        \tkzDefPointBy[rotation=center B angle 90](E)
        \tkzGetPoint{D}
        
        \tkzCalcLength(B,D)
        \tkzGetLength{BDlen} 
        \tkzDefPointWith[linear normed, K=\BDlen](B,A) 
        \tkzGetPoint{G}
        
        \tkzFindAngle(A,D,G)
        % \tkzGetAngle(angleADG)
        \tkzDefPointBy[rotation=center B angle \tkzAngleResult](A)
        \tkzGetPoint{f}
        \tkzInterLL(B,f)(A,D)
        \tkzGetPoint{F}
        

        % ===== 绘制图形 =====
        \tkzDrawPolygon[thick](B,C,E)
        \tkzDrawSegments[thick](A,B D,B A,C D,E A,D D,G B,F G,F)
    \end{tikzpicture}
\end{document}

image.png

3 个回答
M
M 4天前
这家伙很懒,什么也没写!

@u10189 好奇这题答案是什么,$\frac{12}{10-3\sqrt{3}}$?奇奇怪怪的结果就有点慌。。。

越来越少
越来越少 3天前
这家伙很懒,什么也没写!

12bcc3dda81f4424e1e2f0cd0d37f9e7.png

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,arrows.meta}
\usepackage{tkz-euclide}
\usepackage{xparse}
\usepackage{xstring}
\input{centroid_label.tex}%https://www.latexstudio.net/index/details/index/mid/4611.html

\begin{document}

\begin{tikzpicture}[scale=0.4]
%用面积条件计算得到 BD, AB 的长度
\edef\lenBD{\fpeval{sqrt(30)}}
\edef\lenAB{\fpeval{100/(sqrt(10)*3)}}
\let\lenBE\lenBD
\let\lenBC\lenAB
%已知 BG= BD
\let\lenBG\lenBD
\edef\lenAG{\fpeval{\lenAB-\lenBG}}
%余弦定理计算 AD
\edef\lenAD{\fpeval{sqrt(\lenBD*\lenBD+\lenAB*\lenAB-2*\lenBD*\lenAB*cosd(60))}}
%三角形 AGD 相似于三角形 AFB, 计算 AF
\edef\lenAF{\fpeval{\lenAG*\lenAB/\lenAD}}
%余弦定理计算 CE, 角 BCE
\edef\lenCE{\fpeval{sqrt(\lenBD*\lenBD+\lenAB*\lenAB-2*\lenBD*\lenAB*cosd(120))}}
\edef\angleBCE{\fpeval{acosd((\lenCE*\lenCE + \lenAB*\lenAB - \lenBD*\lenBD)/(2*\lenCE*\lenAB))}}

\coordinate (C) at(0,0);
\coordinate (E) at(\lenCE,0);
\coordinate (B) at(\angleBCE:\lenBC);

\coordinate (A) at($(B)!1!-90:(C)$);
\coordinate (D) at($(B)!1!90:(E)$);

\coordinate (G) at($(B)!\lenBG cm!(A)$);
\coordinate (F) at($(A)!\lenAF cm!(D)$);

\draw (A) -- (C) -- (E) -- (D) -- cycle;

\draw (B) edge (A) edge (C) edge (E) edge (D) edge (F);
\draw (G) edge (D) edge (F);

\LabelPts{A,B[-100],C,D,E,F,G[200]}

\coordinate (H) at($(G)!(A)!(F)$);
\draw (A) -- (H) node[anchor=240]{$H$};
\tkzCalcLength(A,H)
\tkzGetLength{lenAH}
%显示 AH 的长度
\node at (0,8) {$AH=\lenAH$};
\end{tikzpicture}

\end{document}

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览