20 平面几何动点问题中的绘图方法 6天02时45分38秒

发布于 2025-08-25 23:09:18

这段时间在大家的热情帮助下,用tkz-euclide来画些基本的图形慢慢可以上手了。

周末和小朋友看题目的时候,发现她们所学习题目中的动点问题也已陆续出现。这种题目,前几次我是看了答案然后定点后绘图,属于“有形无魂魄”。

在B站上面看到有些大佬们用画板来画。向请问下我们在 LaTeX 能比较容易地通过计算来画出来这些答案所对应的精确图形么?

就比如下面题目中的第二问。

image.png

查看更多

关注者
0
被浏览
98
4 个回答
Sagittarius Rover
Sagittarius Rover 18小时前
这家伙很懒,什么也没写!

搜题找到答案

首先做题不在本提问的范围内,所以搜了下题:

搜题答案.pdf

在B站上面看到有些大佬们用画板来画。向请问下我们在 LaTeX 能比较容易地通过计算来画出来这些答案所对应的精确图形么?就比如下面题目中的第二问。

我更倾向于LaTeX更主要是用来「绘图」而非进行「遍历直线上的点、判断是否有交点」一类精确计算的;所以要想「画出来这些答案所对应的精确图形」,不妨 先画靶子再射箭 ,从答案入手。

问题2中对「点D」是没有任何显式限制的,所以由▲ADE确定的「点E」也是自由的,换言之,直线「BE/BN」也是自由的。考虑最后再画直线「BN」。

答案中有三个相关的可能情况,需要一一做排除

image.png

情况一:不存在这样的三角形,进而不存在「精确图形」

要绘制「大概成立的图2-1」,找个差不多的「M」点即可,此时▲FMN必定不是准确的等腰直角三角形。因此这里没必要画,略去。

情况二:考虑当「M(4,0)」的图2-2的情况:

\documentclass[border=5pt]{standalone}
\usepackage{tkz-base}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmin=-5,xmax=5,ymin=-3,ymax=4]
\tkzDrawX[noticks,thick]\tkzDrawY[noticks,right=2pt,thick]
\tkzDefPoints{0/0/O,-4/0/B,4/0/C,0/4/A,0/3/F}
\tkzDrawPolygon[thick](B,C,A)
\tkzDefPoint(4,0){M}
% 这里用▲FMN为等腰直角,用利用\tkzDefPointWith[orthogonal,K=-1]实现FM顺时针旋转90度来定位N点
\tkzDefPointWith[orthogonal,K=-1](F,M)
\tkzGetPoint{N}
\tkzDrawPolygon[thick](M,N,F)

\tkzDrawLine[add=1.2 and 1.5,thick](B,N)

\tkzDefPointBy[projection= onto O--F](N)
\tkzGetPoint{P}
\tkzDrawSegment[dashed,thick](N,P)

\tkzDrawPoints(O,F,M,N,B,C,A,P)
\tkzLabelPoints[above left](O)
\tkzLabelPoints[above right](C)
\tkzLabelPoints[below](B,N,M)
\tkzLabelPoints[right](P)
\tkzLabelPoints[left](A,F)
\end{tikzpicture}
\end{document}

image.png

情况三:考虑当「M(-7,0)」的图2-3的情况:

\documentclass[border=5pt]{standalone}
\usepackage{tkz-base}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmin=-8,xmax=5,ymin=-3,ymax=4]
\tkzDrawX[noticks,thick]\tkzDrawY[noticks,right=2pt,thick]
\tkzDefPoints{0/0/O,-4/0/B,4/0/C,0/4/A,0/3/F}
\tkzDrawPolygon[thick](B,C,A)
\tkzDefPoint(-7,0){M}
% 这里用▲FMN为等腰直角,用斜边FM以及\tkzDefTriangle[isosceles right]来定义等腰直角三角形确定点N
\tkzDefTriangle[isosceles right](F,M)
\tkzGetPoint{N}
\tkzDrawPolygon[thick](M,N,F)

\tkzDrawLine[add=1.2 and .5,thick](B,N)

\tkzDefPointBy[projection= onto O--F](N)
\tkzGetPoint{T}
\tkzDefPointBy[projection= onto O--B](N)
\tkzGetPoint{S}
\tkzDrawSegments[dashed,thick](N,T N,S)

\tkzDrawPoints(O,F,M,N,B,C,A,T,S)
\tkzLabelPoints[above left](O)
\tkzLabelPoints[above right](C)
\tkzLabelPoints[below](B,N,M)
\tkzLabelPoints[right](T,F)
\tkzLabelPoints[above](S)
\tkzLabelPoints[left](A)
\end{tikzpicture}
\end{document}

image.png

供参考。

Eureka
Eureka 14小时前
这家伙很懒,什么也没写!

先 Mark 一下。其实可以用 TikZ 生成 PDF 动图的,有空了我来补充上具体方法。

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

本质上你并没有提出一个 LaTeX 绘图的问题。提问要描述清楚你要绘制什么图。以下采用 tzplot 绘制:

\documentclass[border=1cm]{standalone}
\usepackage{tzplot}
\usetikzlibrary{scopes}

\begin{document}
\begin{tikzpicture}[scale=0.8, thick]
  \draw[->] (-5,0) -- (5,0) node[right]{$x$};
  \draw[->] (0,-3) -- (0,5) node[above]{$y$};
  \tzcoors(0,0)(O){$O$}[-135] (0,4)(A){$A$}[170] (-4,0)(B){$B$}[150] (4,0)(C){$C$}[30] (2,0)(D){$D$}[-30] (-2,-2)(E){$E$}[-90] ;
  \draw(A)--(B)--(E)--(D)--(A) (A)--(C);

  {[shift={(12,0)}]
    \draw[->] (-5,0) -- (5,0) node[right]{$x$};
    \draw[->] (0,-3) -- (0,5) node[above]{$y$};
    \tzcoors(0,0)(O){$O$}[-135] (0,4)(A){$A$}[170] (-4,0)(B){$B$}[-150] (4,0)(C){$C$}[30] (2,0)(D){$D$}[-30] (-2.5,-1.5)(E){$E$}[-150] (-4.8,0.8)(a){} (-1.8,-2.2)(b){};
    \tzdot*[fill=red](0,3){$F$}[l](3.5pt)
    \draw(A)--(B)--(E)--(D)--(A) (A)--(C) (a)--(b);
  }
\end{tikzpicture}
\end{document}

image.png

此外,tikz 绘图不一定需要精确计算坐标,很多时候坐标可以目测,最终实现的结果观感不错就行,毕竟是在绘图而不是做数学题,而要完成以上数学题实际上并不需要图形。

越来越少
越来越少 43分钟前
这家伙很懒,什么也没写!

这是旋转位似变换.

%旋转位似变换
%#1, 变换的中心点
%#2, 被变换的点
%#3, 旋转角度
%#4, 位似比例
%#5, 结果点的名称
\def\RotHom#1#2#3#4#5{
  \tkzURotateAngle(#1,#3)(#2)
  \tkzGetPoint{rotated-point-temp}
  \tkzUHomo(#1,#4)(rotated-point-temp)
  \tkzGetPoint{#5}
}

题目中第一个图形画出的情况: 以 A 为中心, 旋转角度为 -45 度, 位似比例 sqrt(2), 把 x 轴变成直线 BE
1beae1c0e6a562518a89bf74babc046d.png

\begin{tikzpicture}
\tkzDefPoints{0/0/O,-4/0/B,4/0/C,0/4/A,-5/0/xmin,5/0/xmax,0/-5/ymin,0/5/ymax}
\begin{scope}[thick]
\draw [->] (xmin) -- (xmax) node[below]{$x$};
\draw [->] (ymin) -- (ymax) node[above]{$y$};
\end{scope}

\draw (A) node[right]{$A$} -- (B) node[below left]{$B$} -- (C) node[below]{$C$} -- cycle;

\def\RotAngle{-45}

\RotHom{A}{B}{\RotAngle}{sqrt(2)}{B'}
\RotHom{A}{C}{\RotAngle}{sqrt(2)}{C'}
\tkzDrawLine[add=-1cm and 1cm](B',C')

%取点 D, 把 D 变换为点 E
\foreach \i[count=\ci,evaluate={\j = \i*100}] in {0.3,0.6,0.8}{
  \coordinate [label=-90:$D$] (D\ci) at ($(B)!\i!(C)$);
  \coordinate [label=200:$E$] (E\ci) at ($(A)!sqrt(2)!\RotAngle:(D\ci)$);
  \draw [dashed,draw=red!\j!cyan] (A) -- (D\ci) -- (E\ci) -- cycle;
}

\end{tikzpicture}

对于第二个问题, 应该有多个情况, 参照下图:
30bb12f03be9efabeb27156c99ee9233.png
容易看出需要考虑以下点

N= (-3,-1), (-2,-2), (-1/2,-7/2), (3,-7)

所以
4b67acfb7fe5bdba4fa19d92bf5036f0.png

%#1, 变换中心点
%#2, 角度
%#3, 比例
\tikzset{rotate scale trf/.style args={c#1d#2r#3}{rotate around={#2:#1},scale around={#3:#1}}}

\begin{tikzpicture}
\tkzDefPoints{0/0/O,-4/0/B,4/0/C,0/4/A,0/3/F,-5/0/xmin,5/0/xmax,0/-5/ymin,0/5/ymax}
\begin{scope}[thick,>=Stealth]
\draw [->] (xmin) -- (xmax) node[below]{$x$};
\draw [->] (ymin) -- (ymax) node[above]{$y$};
\end{scope}
\node [right] at(F) {$F$};
\draw (A) node[right]{$A$} -- (B) node[below left]{$B$} -- (C) node[below]{$C$} -- cycle;

\draw [rotate scale trf=c{(A)}d{-45}r{sqrt(2)}]
  (-4,0) coordinate (B') -- (4,0) coordinate (C');
  
%\foreach [count=\ct, evaluate={\val = 100*\ct/8}]\CenterPt/\RotDegree/\ScaleNum in {F/45/sqrt(2),F/-45/sqrt(2),F/45/{1/sqrt(2)},F/-45/{1/sqrt(2)},F/90/1,F/-90/1}{
%  \path [rotate scale trf=c{(\CenterPt)}d{\RotDegree}r{\ScaleNum}]
%  [draw=red!\val!green]
%    (-4,0) coordinate (B') -- (4,0) coordinate (C');
%}

\foreach [count=\n,evaluate={\v=100*\n/4}] \NPt/\negRotDegree/\ScaleNum in {{-3,-1}/90/1,{-2,-2}/-45/sqrt(2),{-1/2,-7/2}/-45/{1/sqrt(2)},{3,-7}/-90/1}{
  \coordinate (N) at (\NPt);
  \fill (N) circle (2pt);
  \coordinate [rotate scale trf=c{(F)}d{\negRotDegree}r{\ScaleNum}] (M) at(\NPt);
  \fill (M) circle (2pt) node[above,circle,draw, inner sep=1pt]{\n};
  \draw [draw=red!\v!cyan](N) -- (M) -- (F) -- cycle;
}
\end{tikzpicture}

如果希望看到动态图, 建议使用其他软件, 例如 Geogebra.

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

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览