10 延长线段长度的作图方法 6天10时24分11秒

发布于 2025-08-16 23:03:09

近来在大佬们倾情帮助下,基本上可以用tkz-euclide宏包来绘制些简单的图形了。宏包确实是把以往手工绘制的过程用特定方式来格式化了。小朋友初中二年级的几何图形还相对简单,正适合循序渐进上手。

上个问题 @u70550 的回复中提到了在线段上面取点的方式:

\tkzDefPointWith[linear,K=.35](A,B)\tkzGetPoint{D}

今天画图的时候,我又遇到了一个类似的问题,但没有找的精确的方法,用凑合的方式做了出来。

题目如下:

image.png

绘图代码如下:

\begin{tikzpicture}[scale=1, font=\small]
    
    % ===== 定义点 =====
    \tkzDefPoints{0/0/B, 2/0/C, 4.2/0/D}
    \tkzDefTriangle[two angles=60 and 60](B,C)
    \tkzGetPoint{A}
    
    \tkzDefPointWith[linear,K=2.1](B,C)
    \tkzGetPoint{D}
    \tkzDefPointWith[linear,K=2.6](B,A)
    \tkzGetPoint{E}
    
    % ===== 绘制图形 =====
    \tkzDrawPolygon[thick](A,B,C)
    \tkzDrawSegments[thick](C,D A,E E,C E,D)
    
    % ===== 标记点 =====
    \tkzLabelPoints[below](B,C,D)
    \tkzLabelPoints[above](E)    
    \tkzLabelPoints[above left](A)    
    
\end{tikzpicture}

在「延长BC到点D,延长BA到点E,并且使AE = BD」这个过程,用了一个比较不精确的方法,先定义了D点坐标,使CD=2.2,因BC=2,所以BD=4.2,这个时候,通过:

\tkzDefPointWith[linear,K=2.1](B,C)
\tkzGetPoint{D}

得到D点。因BC=2AE=BD=4.2,所以BE=6.2,这个时候,通过:

\tkzDefPointWith[linear,K=3.1](B,A)
\tkzGetPoint{E}

现在有:

第一个问题是,假如已知BD=4.2的情况下,如何延长BA到点E,并且使AE = BD = 4.2,也就是延长绝对的数量;

第二个问题是,假如BD长度未知,如何得到它的长度,并且延长BA到点E,并且使AE = BD的长度

O(∩_∩)O谢谢!

查看更多

关注者
0
被浏览
65
3 个回答
Sagittarius Rover
Sagittarius Rover 11小时前
我要成为Typst糕手/(ㄒoㄒ)/~~

如何延长线段长度

通过比例确定

\documentclass[border=4pt]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
    \tkzDefPoints{0/0/A, 2/0/B} 
    \tkzDrawPoints(A,B)
    \tkzDrawSegment[-Stealth](A,B)
    \tkzDefPointWith[linear,K=1.5](A,B)
    \tkzGetPoint{C}
    \tkzDefPointWith[linear,K=.75](A,B)
    \tkzGetPoint{D}
    \tkzDefPointWith[linear,K=-.5](A,B)
    \tkzGetPoint{E}
    \tkzDrawPoints[violet](C) % 1.5
    \tkzDrawPoints[cyan](D) % .75
    \tkzDrawPoints[olive](E)% -.5
    \tkzLabelPoints[above](A,B,C,D,E)
    \tkzDrawLine[gray,dashed,add=1 and 1](A,B)
\end{tikzpicture}
\end{document}

image.png

通过长度确定

读文档,不难发现...

image.png

对于linear normed,参数K为「绝对距离」。

\documentclass[border=4pt]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
    \tkzDefPoints{0/0/A, 2/0/B} 
    \tkzDrawPoints(A,B)
    \tkzDrawSegment[-Stealth](A,B)
    \tkzDefPointWith[linear normed,K=1.5](A,B)
    \tkzGetPoint{C}
    \tkzDefPointWith[linear normed,K=2.5](A,B)
    \tkzGetPoint{D}
    \tkzDefPointWith[linear normed,K=-1](A,B)
    \tkzGetPoint{E}
    \tkzDrawPoints[violet](C) % K=1.5 |AC|=1.5,|BD|=0.5
    \tkzDrawPoints[cyan](D) % K=2.5 |AD|=2.5,|BD|=0.5
    \tkzDrawPoints[olive](E)% K=-1 |EA|=1
    \tkzLabelPoints[above](A,B,C,D,E)
    \tkzDrawLine[gray,dashed,add=1 and 1](A,B)
\end{tikzpicture}
\end{document}

image.png

至此,假如已知BD=4.2的情况下,如何延长BA到点E,并且使AE = BD = 4.2,也就是延长绝对的数量;

应该是可以解决了...

如何获取线段的长度

假如BD长度未知,如何得到它的长度,并且延长BA到点E,并且使AE = BD的长度

在文档中也有类似的功能\tkzCalcLength

image.png

下面把|AB|设置为倾斜的,因此|AB|长度需要通过勾股定理,较难计算。同时我们预期在|AC|上延长这段长度:
\documentclass[border=4pt]{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
    \tkzDefPoints{0/0/A, 1.5/0.25/B, 1/1/C}
    \tkzDrawPoints(A,B,C)
    \tkzLabelPoints(A,B,C) 
    \tkzDrawSegments[thick](A,B A,C)
    %计算|AB|的长度
    \tkzCalcLength(A,B)
    \tkzGetLength{dAB}
    %从C点反向延长距离为\dAB的长度
    \tkzDefPointWith[linear normed,K=-\dAB](C,A)
    \tkzGetPoint{D}
    \tkzDrawSegment[magenta,semithick](A,D)
    \tkzDrawPoints[magenta](D)
    \tkzLabelPoints[magenta](D) 
    \tkzDrawSegment[dim={\pgfmathprintnumber\dAB,6pt,}](C,D)
\end{tikzpicture}
\end{document}

image.png

M
M 11小时前
这家伙很懒,什么也没写!

第一个问题:
在已知角B,且BD水平的情况下,点E就是以A为原点,角B为倾角,BD为半径的极坐标

\tkzDefShiftPoint[A](60:4.2){E}

第二个问题:
BD长度未知,但B,D,A三点均已定义(否则就无从谈起了)

  1. 角B已知,且BD水平

    • 计算出BD的长度,再用极坐标定义点
    \tkzCalcLength(B,D) \tkzGetLength{rBD}
    \tkzDefShiftPoint[A](60:\rBD){E}
    • 定义辅助点,再旋转
    \tkzDefPointWith[colinear=at A,K=1](B,D) \tkzGetPoint{x}
    \tkzDefPointBy[rotation=center A angle 60](x) \tkzGetPoint{E}
  2. 角B未知,运用尺规作图的原理,作圆找交点
\tkzDefPointWith[colinear=at A,K=1](B,D) \tkzGetPoint{x}
\tkzInterLC[near](B,A)(A,x) \tkzGetSecondPoint{E}

注:这里作圆只给出了最简单的一种方法,也可以通过半径来作圆。另外,直线和圆有两个交点的时候,需要注意先后顺序,一般会用到nearcommon等参数,具体请参考文档。

画平几草图方法肯定不止一种,宏包也不可能穷尽所有情况,关键还是要熟练掌握一些常用的重要命令,结合平几知识,组合运用,举一反三。

shadow
shadow 4小时前
这个人懒得不得了,竟然啥也没写

用极坐标很容易

\documentclass[border=1cm]{standalone}

\usepackage{tkz-euclide}

\begin{document}

\begin{tikzpicture}[font=\small]

  \tkzDefPoint(0,0){B}
  \tkzDefShiftPoint[B](60:2){A}
  \tkzDefShiftPoint[B](0:2){C}
  \tkzDefShiftPoint[B](60:5){E}
  \tkzDefShiftPoint[B](0:3){D}

  \tkzDrawPolygon[thick](A,B,C)
  \tkzDrawSegments[thick](C,D A,E E,C E,D)

  \tkzLabelPoints[below](B,C,D)
  \tkzLabelPoints[above](E)
  \tkzLabelPoints[above left](A)

\end{tikzpicture}

\end{document}

image.png

若 BD 已知,则 AE 的长就是 BD - BC.
若 BD 未知,则先定义 AE 的长,比如为 x, 则 BD 就是 2+x (BC = 2).

此外,如果对极坐标定义点觉得麻烦,可以自定义一个命令:

\newcommand{\myPolarPoints}[2]{%
    \foreach \ang/\r/\name in {#2}{%
      \tkzDefShiftPoint[#1](\ang:\r){\name}%
    }
  }

这样就可以用类似直角坐标的方法批量定义点:

\documentclass[border=1cm]{standalone}

\usepackage{tkz-euclide}

\newcommand{\myPolarPoints}[2]{%
  \foreach \ang/\r/\name in {#2}{%
    \tkzDefShiftPoint[#1](\ang:\r){\name}%
  }
}

\begin{document}

\begin{tikzpicture}[font=\small]
  \tkzDefPoint(0,0){B}
  \myPolarPoints{B}{60/2/A,0/2/C,60/5/E,0/3/D}

  \tkzDrawPolygon[thick](A,B,C)
  \tkzDrawSegments[thick](C,D A,E E,C E,D)

  \tkzLabelPoints[below](B,C,D)
  \tkzLabelPoints[above](E)
  \tkzLabelPoints[above left](A)
\end{tikzpicture}

\end{document}

撰写答案 当前问题悬赏金额为¥10 元,被提问者采纳后将获得赏金

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览