简介:《动态数学软件GeoGebra使用教程.pdf》是一份面向数学教师、学生及几何作图初学者的入门指南,系统讲解跨平台动态数学软件的安装与实操方法。资料共1个文件,为PDF文档,打包后仅366KB,轻量便携,适合随时查阅。教程从安装和环境配置讲起,涵盖代数区与图形区的基本概念,并逐步演示新点、直线、多边形、圆、角、对称、平移等基础操作,以及函数定义、if语法动态文字、参数曲面、序列物件和自订工具列等进阶技巧。附录还提供以代数式建立对象的指令速查表,方便快速定位常用指令。该资源已有1896人浏览学习。通过这份指南,读者既能掌握GeoGebra的几何构造与代数输入双模式,也能将其灵活应用于教学演示、函数图像探索和数学建模等场景,是一份实用的上手资料。
1. 动态数学软件GeoGebra不是画图工具,是数学对象系统
网上一搜GeoGebra,九成教程教你怎么点工具栏画圆、画线。但对写过代码的人来说,这是最低效的上手方式。GeoGebra真正值钱的地方在于,它把点、线、函数当成可以被命令定义、被参数驱动、被脚本控制的一组对象:你在输入框里敲的不是画布上的一个圆圈,而是一条约束规则。拖动画布上的点,所有依附于它的对象会立刻重算。
所以这篇教程不按“按钮在哪”来讲,而是按“命令如何组织数学对象”来讲。先建立命令式作图的基本功,再依次推进到滑条、CAS符号计算、序列迭代和脚本交互,最后补上构造复杂模型时要做的检查。适合做课件、试题图、算法可视化以及论文插图的开发者和理工科师生。读完你会得到一套可复制的工作流,而不是一堆零散按钮的截图。
2. GeoGebra命令式作图:从定义点到组合几何对象
GeoGebra有两种操作模式:鼠标点在工具栏上慢慢找,或者在底部输入框敲命令。前者适合偶尔画个图,后者适合需要精确、可复用、可调整的构造。命令模式最大的优势是每一步都有记录——你在代数区能看到每个对象是怎么算出来的,这个记录本身就是排错和二次修改的依据。
2.1 用输入框建立点、线、圆,一次搞定“看到”和“算到”
打开GeoGebra后,直接把光标点到输入框,输入下面的内容,每次回车确认一行:
A = (0, 0) B = (4, 0) c = Circle(A, 3)第一行不是在“画一个点”,而是在代数区注册一个坐标点对象A。第二行同理。第三行用命令创建圆c,圆心是A,半径是3。此刻绘图区出现一个圆,代数区里c的定义式写着Circle(A, 3),而不是一串手工算好的坐标。
这就是命令模式与手工绘图的分水岭:你用鼠标画圆,画完就只是几条贝塞尔曲线,和A、B没有任何关系;用命令定义圆,圆就永远“依附”于A。之后用鼠标拖动A,圆会跟着平移,因为它的定义式里引用了A。几何对象命名也有约定:点通常用大写字母,直线、圆、函数通常用小写字母。名字不合法会被系统自动改名或直接弹错误提示。
2.2 依附对象:让图形随参数自动重算的底层机制
GeoGebra里的对象之间存在父子依赖关系,在代数区看得非常清楚。选中圆c,右侧属性面板里能看到它的定义式是Circle(A, 3),父对象是点A。你把A拖到哪,圆就跟到哪;你把A删掉,圆也会跟着消失——因为它已经没有父对象了。
这个机制对程序员来说,和前端框架里的响应式数据绑定几乎是一回事。你定义的是“数据之间的关系”,而不是“最终显示的一张图”。所以判断一个GeoGebra模型是否合格,不要只看画面对不对,要看代数区的定义式:凡是由命令定义的对象,定义式里引用了谁,谁就是它的父对象;拖动父对象,派生对象自动重算。
这里有一个很常见的误用:有人用工具栏“画点”工具在图上点了很多点,再用鼠标把它们摆到合适位置。结果拖一个点,其他点纹丝不动。检查方法很简单——在代数区找一个点对象,如果它只有一个孤零零的坐标,没有任何定义式,那它就是游离点,不参与任何联动。这种模型只能应付一次性出图,做不了动态演示。
2.3 组合命令做经典构造:外接圆三步走
命令真正的威力在于组合。以“任意三角形外接圆”为例,它不需要任何插件,四条命令就能完成:
A = (0, 0) B = (4, 0) C = (1, 3) ma = PerpendicularBisector(A, B) mb = PerpendicularBisector(B, C) O = Intersect(ma, mb) cir = Circle(O, A)PerpendicularBisector(A, B)返回线段AB的垂直平分线;Intersect(ma, mb)求两条直线交点,也就是外心O;最后用Circle(O, A)做外接圆。注意最后一行的半径写的是点A而不是数——圆从“以O为圆心、OA为半径”这个几何关系里派生出来,而不是死记一个距离数值。
这段构造最容易出的问题:看不到外接圆。先别急着怀疑命令拼写,去代数区看ma、mb、O的值。如果ma显示undefined,多半是A、B重合或坐标差了小数点;如果O显示undefined,说明两条垂直平分线平行——这在数学上不该发生,实际多半是某个点坐标输错了。命令式构造的好处就在这里,错误会沿着依赖链暴露,而不是只留给你一张“画坏了”的图。
| 命令 | 参数示例 | 返回对象 | 典型用途 |
|---|---|---|---|
Midpoint(P, Q) | Midpoint(A, B) | 点 | 中点、重心构造 |
Intersect(c, d) | Intersect(ma, mb) | 点或点列表 | 求交点 |
Tangent(A, c) | Tangent(P, c) | 直线或直线列表 | 作切线 |
Polygon(A, B, C) | Polygon(A, B, C) | 多边形 | 三角形、四边形 |
Distance(P, Q) | Distance(A, O) | 数值 | 校验长度 |
3. 函数、滑条与CAS:把数学对象变成可调参数
本章处理GeoGebra里最核心的“动态”能力:让数学关系随参数实时变化。实现它只需要一个对象——滑条。滑条在GeoGebra里不是播放动画的玩具,而是标准的数值对象,能被函数、点、曲线、脚本任意引用。
3.1 滑条是GeoGebra里最重要的参数注入装置
先建立一个滑条,再让函数引用它:
a = Slider(-5, 5, 0.1) f(x) = a * x^2 + 1Slider的三个参数分别是最小值、最大值和增量。回车后绘图区出现一条抛物线,旁边多出一个可拖动的滑条。拖动滑条,抛物线开口大小实时变化——因为函数f的定义式里引用了数值对象a。这里的参数选择有讲究:增量0.1适合观察抛物线开口变化的连续过程;如果只是定性演示,增量0.2就能覆盖大范围;但增量设成0.001会让每次拖动都触发大量重算,滑条变得很黏,动画曲线不平滑。
更复杂的场景是多个参数同时作用。比如演示正弦波的三个物理量:
f(x) = a * sin(b * x) + c先用Slider分别建a、b、c三个滑条。注意一点:如果你直接输入f(x) = a * sin(b * x) + c而a、b、c还不存在,GeoGebra会弹窗询问是否创建滑条。这里建议先手动建好滑条并命名,否则系统自动生成的名字可能是a_1、b_1之类,后续脚本和动画引用容易踩坑。
3.2 函数、隐式曲线与参数曲线:什么时候用哪种定义
GeoGebra可以同时接受三种曲线定义方式,它们并不等价:
f(x) = x^3 - 3x x^2 + y^2 = 9 p(t) = Curve(cos(3*t), sin(3*t), t, 0, 2*pi)f(x) = x^3 - 3x是函数,要求每个x对应唯一y值,做不了竖直切线,也画不出封闭曲线。x^2 + y^2 = 9是隐式曲线,它表达“满足这个方程的所有点”,能画圆、椭圆、甚至很复杂的代数曲线。Curve(cos(3*t), sin(3*t), t, 0, 2*pi)是参数曲线,用参数t依次扫描表达式,t的范围是闭区间。实际使用时,函数能做交点、求导、求极值,隐式曲线更适合表达几何轨迹,参数曲线适合绘制极坐标图形和复杂路径。
需要注意定义域。GeoGebra默认函数定义域是全体实数,导致某些函数在绘图区“看不见”但代数区有值。处理方式是显式给出定义域:
g(x) = If(-3 <= x <= 3, x^2)If(条件, 表达式)类似于编程里的guard,只保留满足条件的区间。这个写法在数学建模里非常实用,例如分段函数、限定物理意义的函数图像。
3.3 用CAS视图跑符号计算,与作图区联动
CAS视图是GeoGebra的符号计算环境,输入Derivative(f)能求导,输入Integral(g)能积出原函数。与代数区的数值逼近不同,CAS直接操作符号表达式,适合处理公式推导。
在CAS视图里输入:
h(x) = x^3 - 3x Derivative(h(x)) Solve(h'(x) = 0, x)第一行定义函数,第二行得到3x^2 - 3,第三行解出驻点x = -1和x = 1。这里h'(x)是对h的导数调用,CAS能自动识别这个记号。实际教学里,用CAS算完极值,再回代数区画出函数图像,学生能同时看到“算出来的驻点”和“图像上的峰谷”对应关系。
CAS与作图区是联动的。在CAS里定义一个新函数,切回代数区它就会出现在对象列表里,也能直接在绘图区画出来。这种联动意味着你可以把符号计算嵌入到整个构造流程中:先用CAS验证公式,再把结果赋给几何对象,最后用滑条驱动观察。
4. 序列、迭代与轨迹:让对象按规则批量生成
手工逐个创建对象违背了命令式工具的本意。GeoGebra提供了Sequence和IterationList两条批量生成路径,分别对应离散列举和迭代逼近。掌握它们之后,构造100个点和构造1个点的工作量没有区别。
4.1 Sequence生成点集:把循环写进对象列表
pts = Sequence((k/5, (k/5)^2), k, -5, 5)这条命令生成11个点:k从-5取到5,步长默认1,横纵坐标分别是k/5和(k/5)^2。这些点落在抛物线y = x^2上。把步长改小到0.5,点的密度立刻翻倍,命令不需要改第二遍。
circlePts = Sequence(Point(c, k/10), k, 0, 10)这里Point(c, t)返回圆c上参数位置为t的点。k从0到10,等价于把圆按参数方向均匀切分。生成的连续点如果是首尾相连的,能用Polygon(circlePts)直接连成一个内接多边形。这个技巧在演示正多边形逼近圆形、绘制星形线时非常实用。
Sequence有五参数形式:表达式、局部变量、起始值、终止值、步长。最后一个参数可省略,默认步长1。参数范围建议宁大勿小,因为GeoGebra对象是惰性求值,生成多不会立刻卡顿,真正卡的是你在后面又对每个点分别加了一条线段——那才有几十倍的对象膨胀。
4.2 IterationList做数列与分岔观察
迭代在数学里用途极广,GeoGebra的IterationList专门生成迭代序列:
x0 = 0.3 r = 3.5 IterationList(r * x * (1 - x), x, x0, 40)IterationList(迭代式, 局部变量, 初值, 迭代次数)返回一个列表,元素个数是迭代次数加一:第一个元素是初值x0,之后是每一轮的迭代结果。这里是逻辑斯蒂映射的经典例子,r取3.5时代入初值0.3,40步之后能明显看到数列进入周期震荡,而不是收敛到单点。
要取列表中的最后一个值,用Element(list, 1)取第一个,Element(list, 41)取第41个。如果只想要最终结果不在乎中间过程,直接用Iteration(迭代式, 初值, 次数),它的返回是单个值。
与Sequence配合,可以画迭代过程的点列图:用Sequence把迭代列表里的序号对应成横坐标,把列表元素对应成纵坐标,就能把数列震荡画成折线图。这种离散序列的可视化能力,很多专业计算软件反而没有GeoGebra来得顺手。
4.3 Locus获取连续轨迹,而不是描迹残影
GeoGebra中有一个极其容易混淆的操作:“描迹”和“轨迹”。描迹是右键打开Trace,拖动点时画布留下残影,它只是像素残留,不是对象,不能参与后续计算。Locus则不同,它生成真正的几何对象。
c = Circle((0, 0), 3) P = Point(c) A = (0, 0) M = Midpoint(A, P) Locus(M, P)P是圆c上的动点,M是定点A与P的中点。执行Locus后,画布上出现一个圆——M的轨迹。数学上容易证明这个轨迹是圆,半径是原来的一半;GeoGebra给你的是一个可以直接求交点、量周长、做切线的真实对象。
Locus(轨迹点, 驱动点)要求驱动点必须依附在某条路径上,比如圆、线段、函数曲线。如果驱动点是一个自由点,Locus会直接报错或返回undefined。调试时要先确认驱动点的依附关系,再检查轨迹点是否确实由驱动点通过命令派生。
5. 按钮、脚本与网页嵌入:把GeoGebra做成交互应用
到了这一层,GeoGebra已经不只是画图工具,而是一个可以打包成交互页面的运行时。按钮和脚本让对象响应点击事件,网页嵌入则让整个构造对外提供服务。
5.1 按钮与OnClick事件:最少代码的交互入口
在工具栏新建一个按钮,弹出对话框让你填标题和脚本。比如放一个“重置”按钮,脚本写:
SetValue(a, 0) StartAnimation(false)点击按钮后,滑条a被强制赋值为0,同时停止所有动画。这对应前端里的onclick回调——按钮的点击事件被绑定到这段脚本上。GeoGebra里的每个对象属性面板都有“脚本”页签,里面可以挂OnClick、OnUpdate等事件。OnUpdate在对象数值变化时触发,相当于响应式框架里的watch,常用于拖动滑条时实时更新文本、隐藏对象或检查边界。
脚本出错时不会弹编译错误窗口,通常表现为点击后毫无反应。排查套路是先打开代数区,手动执行SetValue(a, 0),如果这条命令能跑通,说明命令本身没问题,再去检查按钮脚本里是不是有对象名拼写错误。
5.2 用SetValue/SetVisible/条件显示管理对象状态
GeoGebra脚本的常用命令并不多,掌握三组就够覆盖多数交互场景:
SetValue(a, 2) // 设置滑条或数值对象的值 SetVisible(P, false) // 隐藏点P SetConditionToShowObject(P, y(P) > 0) // 当P的y坐标大于0时显示PSetValue是脚本里最常用的“赋值语句”,凡是滑条、布尔值、自由数值都能用它改。SetVisible控制对象是否显示,注意它只影响显示,不影响对象参与计算。SetConditionToShowObject是条件显示,它接受一个布尔表达式,表达式结果决定对象是否出现在画布上,适合做“只显示满足条件的部分”这种动态筛选。
做演示时最常用的组合是:滑条负责驱动动画,按钮负责重置状态,条件显示负责按参数范围切换呈现内容。三者配合能构造出类似“点击按钮开始/暂停/清空”的完整交互逻辑。
5.3 嵌入网页:GGBApplet与动态工作表
GeoGebra官方支持直接把构造导出为动态网页或嵌入HTML页面。在自己的项目里嵌入时,常见做法是用官方部署脚本和GGBApplet对象:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>GeoGebra 嵌入示例</title> </head> <body> <div id="ggb-element"></div> <script src="https://www.geogebra.org/apps/deployggb.js"></script> <script> var app = new GGBApplet({ 'appName': 'geometry', 'width': 800, 'height': 600, 'showAlgebraInput': true, 'showMenuBar': true, 'showToolBar': true }, true); app.inject('ggb-element'); </script> </body> </html>GGBApplet的第一个参数是配置对象:appName决定启动哪个子应用,geometry是纯几何,graphing是函数图像,classic是完整界面;showAlgebraInput控制是否显示输入框;showMenuBar和showToolBar控制顶部和工具栏。第二个参数true表示使用HTML5渲染,而不是已经很少用的Java或Flash。
配置对象里还可以加filename参数,指向同目录下的.ggb文件,这样打开网页就直接加载你构造好的模型,而不是空白画板。这种嵌入方式对做在线题目、内部知识库、算法演示页来说足够了——你不必为用户准备GeoGebra桌面端,只要浏览器可用就能交互。
6. 构造复杂GeoGebra模型前先做这三组检查
构造完成不等于模型正确。复杂构造里最常见的错误不是命令语法,而是对象间的依赖关系悄悄断掉。我一般在交付任何模型前做三组固定检查。
检查对象依赖树。逐个选中模型里的点、线、圆,在代数区看定义式:每个对象都应当能追溯到最底层的自由点或数值对象。如果某个对象只有坐标没有定义式,它就是游离点,拖动时不会带动任何依附对象。出现这种情况,直接删掉重画,不要继续往上面堆构造。
用校验值验证几何关系。以本章前面构造的外接圆为例,可以加三条Distance命令做核对:
d1 = Distance(O, A) d2 = Distance(O, B) d3 = Distance(O, C) check = d1 - d2如果check的绝对值在滑条拖动的全过程中始终接近0,说明外心到A与B的距离确实相等,外接圆构造没有变形。这种“把几何验证写成可观测数值”的做法,比肉眼盯着屏幕看圆是否穿过三点可靠得多。
性能档位要提前设好。做动态演示之前,把滑条增量调到0.1而不是0.01,观察是否满足连续性需求;点集用Sequence批量生成,不要手工复制;连续轨迹用Locus而不是描迹,否则一张图拖动十分钟后会积累几千个像素描影,导出图片时还会留下难看的拖尾。导出场景也要早定:PPT插入用PNG,论文插图选SVG或PDF,交互演示直接嵌入网页,不同输出格式对应不同的细节加工。
最后在交付之前做一次参数扫雷:把每个滑条从最小值拖到最大值,再在整个区间内拖几个来回,观察所有依附对象是不是在边界处仍然有定义。这一条能暴露绝大多数undefined和除零问题,比任何事后检查都来得快。
本文还有配套的精品资源,点击获取