GeoGebra必学必用经验

Author : zbzhen,        Modified : Mon Apr 22 14:05:09 2024

倒计时到6月7号上午9点只剩:

GeoGebra(官网 https://geogebra.org/ , 音译: 几何不难)是一款开源跨平台的非商用免费软件, 一定要注意商用无价, 当心被坑. GeoGebra有三个版本, 分别是版本5, 版本6和网页版, 点我查看三者的区别.

数学绘图是一种可以复制的艺术
数学功底决定绘图造诣

1. 必用操作

1.1. 常用快捷键与输入

快捷键 功能
Ctrl Shift+ A 显示或隐藏代数区
Ctrl E 显示或隐藏设置
Alt + 右键框选 把框选对象加入到列表
Alt + O
Alt + P π
Alt + I 虚数
Alt + S 根号
Alt + A α
Alt + b,g,t,L β, γ, θ, λ
输入sqrt 根号
Shift + 6 上角标
Shift + - 下角标

1.2. 导入ggb文件

  • 紧按鼠标左键, 直接把ggb文件拖入到画图的界面中

1.3. 保存ggb文件

  • 界面右上角字形状的图标--->Download as--->ggb

  • 其实最简单的办法是点击页面 https://kz16.top/ggb 最上方的 ⇩ᯤ 按钮即可联网使用(文件可直接分享给好友), 保不保存ggb文件无所谓. 当然也可以导出离线 ⇩ᯤX , 这需要下载离线包, 并且要把离线文件放到离线包中.

1.4. 下载官网ggb课件

1.5. 导入图片

  • 法1: 紧按鼠标左键, 直接把图片拖入到画图的界面中

  • 法2: 点击最上边滑动条那个图标--->Image--->Choose File

1.6. 导出透明svg矢量图

  • 先点击字按钮, 再点击 ⇩svg 按钮, 可直接得到svg图

  • 推荐用inkscape把svg转化为pdf文件

1.7. 提取ggb中被插入的图片

  • 只需要把ggb文件用解压软件解压即可, 推荐用免费无广告的 https://7-zip.org/ 解压, 用解压软件解压.ggb文件一定有惊喜!

1.8. 在markdown文档中插入geogebra

一共有两种方法, 无论用哪种方法都应该下载全面版而不是简洁版

1.8.1. iframe方法

假设当前文件夹为 your/file/path/showumd/md_ggb

该方法有两种方式

<iframe src="https://localhost/md_ggb/circ.html" width="800" height="400" frameborder="0"></iframe>

<iframe src="./circ.html" width="800" height="500" frameborder="0"></iframe>
  • 第一种借助了https的方法, 该方法的前提得启动本地https服务, 很简单的, 只需要运行run.bat文件; 它的优势是可以实时预览, 方便设置iframe的范围

  • 第二种方式, 用了相对路径, 更容易移植. 不过并不方便实时预览, 因为支持这种方式实时预览的md编辑器并不多.

  • 该方法, 代码简洁, 但是文件比较多, 如果页面内容多更推荐用子文件夹存放所有的ggb文件

当然还可以使用官方的链接, 例如

// 二维图
<iframe src="https://www.geogebra.org/material/iframe/id/fph9pf2x/width/400/height/400/" width="400px" height="400px" style="border:0px;"> </iframe>
// 三维图需要加上 sdz/true, 确保三维图可以调整视角 
<iframe src="https://www.geogebra.org/material/iframe/id/c5s3gwmz/width/400/height/400/sdz/true" width="400px" height="400px" style="border:0px;"> </iframe>

具体参考官方说明文档: https://wiki.geogebra.org/en/Reference:Material_Embedding_(Iframe)

问题: 官网https链接怎么生成?
回答https://kz16.top/ggb/ 登陆官方账号, 然后依次点右上角按钮-->share(分享)就可以得到官网链接

1.8.2. base64方法

具体参考视频

https://www.bilibili.com/video/BV1ie411k7HF

整个实现需要两步:

1. 样式设置部分
<div id="ggbs0" style="height:500px; width:600px;font-size:0">
"borderColor":"black", 
"enableRightClick":true,"enableShiftDragZoom":true, "enableLabelDrags":true,
"showMenuBar":true,
</div>

2. 主体base64部分(它可以通过<<ggb多页与js互转小助手.html>>轻松获取)
<script>var ggbpath = "../geogebra/5.0/web3d/"; </script>
<script src="../geogebra/deployggb.js"></script> 
<script>var ggbs=new Array();ggbs[0] = 'UEsDBBQACAgIALoGnFMAAAAAAAAAAAAA...'</script> 
<script src="../js/ggbmd.js"></script>

该方法缺陷为base64代码很长, 且难以实时预览

优势为不占用过多文件, 相对来说兼容性更强

1.9. ggb版本的更新

如果只是想更新ggb版本, 只需两步:

  1. 下载并解压官网最新网页离线包 https://download.geogebra.org/package/geogebra-math-apps-bundle
  2. 找到新版本web3d文件夹, 然后替换多页版里的 web3d文件夹

2. 必学技巧

2.1. 常用小技巧

  • 绘图的过程中, 点了绘图小图标工具后一定要记得点击左上角的剪头, 确保是移动状态

  • 鼠标右键可设置属性, 或者框选多个对象

  • Shift或者Ctrl可以一次性选择多个对象

  • 尽量用代码画图, 推荐代码用markdown编辑器保存起来, 参考 https://kz16.top/md/

  • 对不熟悉的指令, 可以用必应或者谷歌搜索, 搜索的词条为
    geogebra 指令名, 例如geogebra zip, 一般第一条就会得到指令解释

2.2. 循环与求和

更多循环相关信息, 请点这里

2.2.1. 序列循环zip

  • 推荐用zip, 完全没必要用sequence

    例如得到列表{1,4,9,16,25,36}可以这样写

    zip(k^2,k,1..6)

2.2.2. 迭代Iteration

  • IterationList
    iterationList(p*10+1, p, {1}, 2)
    结果为 {1, 11, 111}

    斐波那契数列
    iterationList(b+a, a, b, {1, 1}, 5)
    结果为 {1,1,2,3,5,8}

  • Iteration
    iteration(p*10+1, p, {1}, 2)
    结果为{111}

2.2.3. 序列求和Sum

  • 求和要注意大写, 求列表
    {1,4,9,16,25,36}的和
    Sum(k^2,k,1,6)

要注意:

zip括号中的1..6是用两点隔开的
Sum括号中的1,6是用逗号隔开的

2.3. 判断

例如绘制分段函数
f(x)=if(x<0,-1,x<1,x,1)

此外可能偶尔用到keepif以及countif

如果想绘制椭圆的一部分图像, 推荐用参数方程作为判断, 而不是对隐函数做判断, 因为GeoGebra的隐函数功能很弱, 例如绘制椭圆的第一象限:

curve((2cos(t), sin(t)),t,0,pi/2)

如果用隐函数可以这样:

x^2/(x>=0) + y^2/(y>=0) = 1

2.4. 列表

列表从某种意义上可以被认为是集合或多维向量, 列表中可以有数也可以有其它对象, 例如点, 线, 多边形等, 同数学中的集合一样, 用{}把元素括起来. 常用的指令及相关技巧有:

  • 1..4得到结果{1,2,3,4}

  • 合并join, 展平flatten 可分别看例子
    join({1},{2,{3}})得到{1,2,{3}}
    flatten({{1},{2,{3}}})得到{1,2,3}

  • a(1)element(a, 1)表示列表a的第一个元素, a(-1) 表示列表a的最后一个元素, element(a, -1)会报错

  • take(a,2,4)表示取列表a的第2,3,4号索引, 例如
    take(1..6,2,4)得到2,3,4

  • Union(a,b)表示a,b的并, Intersection(a,b)表示a,b的交

  • 属于符号完全和数学一致

  • 对列表循环, 通常用zip函数, 例如得到列表a={1,3,1,4}的平方, 可以这样
    zip(k^2,k,a) 也可以直接a^2 结果都是{1,9,1,6}

  • 同时对多个列表循环, 例如计算2个列表的和

    a={1,2,3}
    b={4,5,6}
    zip(ak+bk,ak,a,bk,b)
    

    上面最后一步当然也可以直接写成a+b

其它一些操作, 列表可以当成某个特殊的, 例如

  • {1,2}*3结果为{3,6}

  • {1,2}+{3,4}结果为{4,6}

  • ln({1,e,e^2})结果为{0,1,2}

  • ... 其余的可自己去尝试

一个非常使用的框选多个点转变为列表的操作为:
紧按Alt+ 鼠标右键 框选点最后回车即可.

列表的数据导出来,可先导出为html文件,然后打开html文件,即可复制列表中的数据.

2.5. 向量与点

向量和点在某种意义下可以认为是同一个类对象, 都可做向量的基本加减和数乘运算, 稍微有点区别的是, 向量会有个箭头, 并且一般默认用小写字母表示向量, 大写字母表示点

  • A=(1,2), 则x(A)=1, y(A)=2

  • A=(1,2), B=(3,0), 则它们的中点为(A+B)/2

  • 用分号隔开则表示极坐标, 例如
    B=(1;pi/3)

2.6. 复数

复数的基本表示方法和数学没什么区别, 例如
Z=1+3i
它的一个很大的作用是, 把某个对象乘以复数, 等于是做旋转和伸缩变换, 例如, 若A=(1,2), 则i*AA*i结果为-2+i

这样使得代码变得简洁, 当然可能不利于新手阅读代码

2.7. 插入特殊的标记对象

例如插入一个花括号, 把两个自由的点括起来

  • 制作透明花括号的svg矢量图片
    • t=text("\overbrace{\qquad\qquad}",(0,0),true,true)
    • 右键框选花括号图片, 并输入下面代码, 回车
      ExportImage("filename","image.svg","type","svg")
  • 导入上一步的花括号图片image.svg, 默认导入的图片为辅助对象, 第一个图名字为pic1
  • 接下来就是控制图片的大小, 任意绘制2个点A,B, 并且
    C=A+i (B-A)/abs(A-B)*aaa*4,
    然后右键设置图片的三个角点位置别为A,B,C. 这样调整A,B括号会自适应改变
  • 如果要绘制多个花括号, 就复制图片CopyFreeObject(pic1)或者再上传一次图片, 然后重复操作

如果使用频率高, 可以把上面的步骤做成工具

2.8. 参数方程

总得来说分成三类: 圆弧, 折线和一般曲线

2.8.1. 圆弧的参数方程

求圆弧ABC, 的参数方程

A=(0,0)
B=(1,0)
C=(0,1)
Q=center(circle(A,B,C))
r=abs(Q-A)
t1=angle(A-Q)
d=cross(A-C,B-C)
t3=if(d>0,angle(A,Q,C),angle(C,Q,A))
c=curve(Q+(r;t1+t3*t*sgn(d)),t,0,1)

这里需要设置角度的范围为0-360, 因此推荐用本文提供的模板, 无需自行设置, 并且做成了工具, 工具名为arct
https://kz16.top/ggb
输入的是圆弧上的三个点, 例如arct(A,B,C)

2.8.2. 折线参数方程

Lp = {(0,1),(2,1),(1,3)}
n = length(Lp)-1
f(x)=Function(join({0,n},x(Lp)))
h(x)=Function(join({0,n},y(Lp)))
a = curve(f(t*n),h(t*n),t,0,1)

对于一般线段AB的参数方程可以为
curve(A(1-t)+B*t,t,0,1)

在模板 https://kz16.top/ggb
工具polyt可以得到归一化参数方程, 也就是参数范围为[0,1], 工具polys得到弧长参数. 两个工具的输入参数都是点列, 例如 polyt({(0,1),(2,1),(1,3)})

折线参数方程数学理论可参考:
https://kz16.top/geogebra/polyarc.html

2.8.3. 一般曲线参数方程

pt = {(0,1),(2,1),(1,3)}
a = spline(pt)

一般的参数方程, 推荐用样条插值, 多项式拟合可以选择FitPoly, 或者直接自行选择基函数再用fit函数拟合

2.9. 区域涂色

本质上是一个确定区域的数学题, 因此主要可以有这么几种方法

  • 不等式法 : 只需知道表示交, 表示并, ¬表示非, 或者分别用符号&&, ||, !

  • 多边形 : 直接绘制多边形即可

  • 参数方程 : 如果曲线首尾没有连接, 默认会用直线连上

这里主要讲万能的参数方程法处理对于一般的带有曲边和直边的区域涂色

给定一个区域, 和区域边界上任意的几个点A,B,C,D,E,F,G, 满足
ABC是曲线段
CD是线段
DEF是曲线段
FGA是线段
则该区域的涂色可以用如下GeoGebra代码绘制:

a = spline({A,B,C})
b = curve(C(1-t)+D*t,t,0,1)
c = spline({D,E,F})
d = curve(F(1-t)+G*t,t,0,1)
f = curve(if(t<1,a(t),t<2,b(t-1),t<3,c(t-2),d(t-3)),t,0,4)
SetDynamicColor(f,0,0,1,0.3)

上面的方法用到了样条插值, 逼近效果是很不错的, 通常情况下可以处理几乎所有的区域涂色, 对于圆弧段曲线, 可以自行写出相应的参数方程. 相关参数方程的求法可回顾之前介绍的参数方程

参数方程着色稍微麻烦的地方就是合并参数方程

例如: 合并2个归一化的参数方程a与b可以表示为

Curve(if(t<0.5,a(2*t),b(2*t-1)),t,0,1)

重复下去, 可以把多个参数方程合并为一个

2.10. 模糊的png数学图转svg矢量图

实现这一步需要用到前面的经验和技巧

  • 紧按鼠标左键, 把png图片拖到绘图区

  • 在png图上临摹点, 如果是曲线就多加几个点, 对于折线或线段就绘制折点和端点.

  • 用前面提供的参数方程的办法, 把线条用参数方程写出来

  • 修改样式: 线条的粗细, 样式, 颜色等, 区域涂色, 适当注意下图层等, 隐藏不必要的点或标签. 这一步可以通过鼠标右边点击对象, 设置对象的属性或样式

  • 如果要用LaTex公式标签, 记得选serifLaTex formula
    LaTex相关常用符号, 可参考 https://kz16.top/latex/symbol/

3. 动态交互

有了前面的知识, 应该可以绘制绝大部分的静态图

对于动态交互图,

用得最多的是滑条Slider 其次是复选框和按钮(其实多数情况下复选框比按钮实用, 甚至可完全按钮). 因此只需知道滑条和复选框的使用方法

3.1. 滑动条

创建滑动条

k=Slider(0,1,0.01)

没必要手动点, 直接输入代码就好, 这里有3个参数, 前两个是范围, 最后一个是增量, 不必担心记不住Slider这个单词, 输入前面两个单词就会有提示的, 而且多输入几次就记住了. 不推荐中文名字, 因为切换输入法太慢了

有了滑条可以绘制含参函数, 例如
f(x) = k*x^2

也可以做动点, 例如, 用滑条控制点做圆周运动

k=Slider(0,2pi,0.01)
A=(1;k)

也可以控制三角形做旋转或平移运动

k=Slider(0,2pi,0.01)
t1 = {polygon((0,0),(1,0),(0,1))}
rotate(t1, k)
translate(t1, (k,0))

上面的代码, 把polygon((0,0),(1,0),(0,1)){}括起来是为了把它变成列表, 这样就不会出现额外的边对象

3.1.1. 动态轨迹

例如绘制下面的动态交互曲线

a = slider(0,1,0.01)
b=Curve((sin(2π*t),2t^(2)),t,0,a)

或者用轨迹法(这种方案虽然麻烦, 但是比较具有一般性)

a = slider(0,1,0.01)
f=segment((0,0),(0,a))
A=point(f,1)
t = y(A)
H=(sin(2π*t),2t^(2))
c=locus(H,A)

3.1.2. 滑动条在指定位置自动停留

在实际做演示过程中, 需要滑条在指定位置停留, 然后点击按钮会启动. 例如滑条在0,1,e,pi,6位置上自动停留

Lp={0,1,e,pi,6}

n=slider(0,length(Lp)-1,1)
n=1

b=slider(Lp(n),Lp(n+1),0.01, 10 / abs(Lp(1 + n) - Lp(n)))
 ## 上面的参数10可用于设置滑条速度
 ## b 的 slider-->Repeat 设置为: 
    Increasing (Once)

a=slider(Lp(1),Lp(-1),0.01)
 ## a 的 On Update 脚本为: 
    SetValue(a,b)

t=button("start")
 ###  t的 On Click 脚本为:
SetValue(n, If(n==length(Lp)-1, 0, n))
n = n+1
StartAnimation(b, true)
StartAnimation(a, true)

嫌弃上面代码麻烦, 不妨直接看成果
https://www.geogebra.org/classic/xsymtz3s
缺陷是往返设置略微麻烦

3.2. 复选框

如何通过按钮实现停止和启动滑动条? 可用复选框轻松搞定

  • 创建滑条 k=Slider(0,1,0.01)

  • 创建复选框 a=true

  • 右键点a--->Setting--->Scripting--->On Update, 然后把代码StartAnimation(k,a)粘贴到界面On Update下面的框中, 并且叉掉刚打开的Setting(设置)框

  • 点击复选框a左边的矩形按钮, 就可以实现停止和启动滑动条

3.3. 一次性导入多行的代码

代码太多, 一行行输入着实麻烦, 一次性导入多行代码其实也很简单

  • 创建复选框 a=true

  • 右键点a--->Setting--->Scripting--->On Update, 然后把多行ggb代码粘贴到On Update下面的框中, 并且叉掉刚打开的Setting(设置)框

  • 点击复选框a左边的矩形按钮, 可直接执行多行ggb代码

其实第一步也可以创建一个点或按钮, 不一定非要复选框

3.4. 导出动态图以及PPT展示

可以选择用gif或mp4录屏软件, 其实它的作用主要用于网络交流

对于非正式演示, 可以直接拿出ggb展示, 如果是多个ggb文件, 直接用网页版多页模板 https://kz16.top/ggb 即可

如果是正式场合, 推荐导出多张svg矢量图帧, 实现动态变化, 那么这里涉及两个问题:

  • 一是导出的图需要大小一样, 并且连续两张图的变化要比较平和, 也就是要确保该固定的得固定, 该变化的得变化.

  • 二是导出多个图片帧怎么插入PPT中做成动态效果? 其实在PPT中很容易处理的, 一种小白很容易实现的办法是: 先插入第一张图片, 再复制粘贴多个当前页面, 最后挨个翻页, 右键点图, 把每个页面的图片替换成目标图

对于上面提到的第一个问题, 用网页版多页模板 https://kz16.top/ggb 就比较简单了, 只需每变动一步, 点击页面最上方的克隆⚣按钮, 然后就可以鼠标左键点边框外的空白处, 按上下方向键翻页, 预览效果, 最后通过指令, ExportImage("filename","image.svg","type","svg")可以逐个页面快速导出svg矢量图

这种做PPT动态图的方法, 确实有点麻烦, 但是效果是真的好, 为了效果, 正式场合耗费时间也是值得的

4. 交流分享

做好了动态ggb图, 希望可以保存在云端, 然后通过链接分享给别人, 或者只是自己私密保存, 这个其实非常简单, 以本文的网页版多页模板为例

  • 官网 https://www.geogebra.org/ 或国内镜像 https://www.ggb123.cn/ 注册账号

  • 在页面 https://kz16.top/ggb 里登陆, 具体步骤是: 右上角字形状的图标--->Sign in

  • 右上角字形状的图标--->Share, 弹出一个窗口, 可以选择 Shared(分享) 或者 Private(私密), 这个可以根据需求选择, 然后点 SAVE(保存), 会弹出一个对话框, 里面有一个链接, 可以复制这个链接, 然后分享给他人

当然也可以直接在页面 https://kz16.top/ggb 上, 点击导出在线⇩ᯤ, 会得到一个html文件, 然后可以把这个html文件分享给他人, 对方可以直接用浏览器打开

5. 离线包的介绍

5.1. 软件下载以及版本说明

新版本功能更强大, 可以支持插入到ppt中, 增加了notes,增加了导出单页离线演示文件的按钮. 包内所有文件都可完全离线使用, 包中所有软件都是开源的, 无需注册和登陆, 跨平台, 免安装, 解压后可用. 因为GeoGebra可免费但不能商用, 因此该离线包也是可免费但不能商用. 下了离线包后, 可以无需安装GeoGebra桌面版.

要想更好的体验把ggb插入到wps ppt中(它和微软 ppt不兼容), 推荐安装wps催化剂,地址为 https://cuihuaji-1254243958.file.myqcloud.com/WPS演示催化剂/publish.html

要想更好的体验把ggb插入到微软ppt中, 推荐在微软PPT中点击插入->获取加载项->搜索web->添加Web Viewer插件. (它和WPS ppt不兼容)

温馨提示:

  • (新版)下载地址 在页面顶部 (免费开源无广告, 仅用于学习, 请勿商用, 跨平台, 解压可用)

  • 解压之后, 运行run.bat, 会弹出两个cmd框, 不要关闭它, 然后在谷歌或者edge浏览器输入 https://localhost/ppt.html 如果能看到信息, 那么就可以打开demo.ppt文件. 在 https://localhost/ppt.html 链接中可以登陆到官网的ggb账号, 并且可点击右上角放大镜按钮查找官网的海量课件

  • 多页模板是基于GeoGebra的离线网页版开发的多页实用模板, 底层依旧用得是GeoGebra官网提供的网页版, 只是额外增加了几个实用按钮, 并设置了一个超实用模板. 下了离线包后, 可以无需安装GeoGebra桌面版.

  • ✕删除页面后可↶撤销删除

  • 点击左上角的播放 ▶️ 按钮, 可以进入演示模式(建议把代数框拉到最左边, 以获得纯净演示界面). 两次Esc可退回正常模式, 或者3次按F11也可退回正常模式

  • 如果只想全屏不演示, 则可按F11进入和退出全屏

  • ⇩ᯤX 按钮可导出离线html文件, 需要放到离线包所在文件夹里才能正常显示

  • 上下方向键或者激光笔可以翻页, 如果翻页不成功, 需要鼠标点击最最顶上方的空白处, 例如Help的平齐右侧

  • 彻底解决分辨率问题: 点击顶上方Help旁边的空白处, 再按组合快捷键Ctrl + + 或者 Ctrl + -可整体缩放页面。 也可以直接 Ctrl+ 鼠标滑轮, 前提条件得 点击顶上方Help旁边的空白处, 否则会改变刻度而不是缩放图形

  • 点击右上角放大镜按钮, 可获取官网海量课件. 建议先点击加页 ✚ 按钮, 再编辑导入官网课件.

5.2. 提问与回答

提问: 如果自己电脑上做好ggb插入到wps ppt的课件后, 发给别人, 别人可以打开吗?

回答: 别人可以打开. 新电脑可以不安装wps演示催化剂, 但是需要有ggb离线多页包, 并一键启动run.bat脚本. 本地安装wps演示催化剂的好处是可以替换和编辑ggb离线网页的地址.


提问: 需要联网吗?

回答: 不需要联网, 下载好软件后, 整个过程可以完全离线操作


提问: 需要付费和登陆吗?

回答: 不需要登陆也不需要付费, 包中所有软件都是开源的. 但是一定要注意GeoGebra软件是不能商用的. 因此该离线包的软件也是可免费但是不能商用. 本项目只是一个小小的公益项目.


提问: 我的机器是苹果电脑, 但是别人机器是win系统, 可以兼容吗

回答: ggb离线多页模板完全可以兼容不同的操作系统, 但是目前插入到wps ppt里不支持苹果系统


相关链接


欢迎非商业转载,转载请指明来源

免责声明: 本开源项目, 源于2019年, 并逐步更新完善. 如果使用该项目引起的任何问题责任以及纠纷等, 本人概不负责.

补充说明: 本项目是基于下面开源项目(请自觉遵循相关协议)

本文来源 https://kz16.top/ggb/ggbpptReadMe.html