028-GeoGebra中级篇-脚本的初步的探索

news2025/1/1 23:56:49

GeoGebra 的脚本功能允许用户通过不同的触发机制(如点击、更新、输入框变化、拖动结束)和全局 JavaScript 自定义图形和交互行为,实现动态数学模型和用户交互,同时 ggbOnInit() 函数可在应用初始化时设置默认状态,提供灵活的定制选项,增强了 GeoGebra 的交互性和功能性。

本来计划GeoGebra脚本放到高级篇去写的,奈何经常用到,那就今天做一个初步探索吧。

目录

    • 一、关于GeoGebra的脚本
      • 1. 关于脚本的学习
      • 2. 关于GeoGebra脚本
        • (1)什么是脚本呢?
        • (2)GeoGebra支持的脚本类型
    • 二、GeoGebra脚本的使用
      • 1. 打开GeoGebra后的页面
      • 2.在命令行创建一个点A(1,1)
      • 3. 创建一个按钮
      • 4. 右键按钮,点击设置,可以打开右侧的设置面板
      • 5. 在Scripting菜单下选择JavaScript脚本,将代码粘贴到On Click栏里
      • 6. 点击按钮就可以开始运行了
    • 三、GeoGebra脚本使用的注意事项
      • 1. 脚本输入框没有单独的进入选项
      • 2. GeoGebra的脚本触发机制有6种
      • 3. 如果想写全局脚本
        • (1)关于function ggbOnInit() {}的疑惑
        • (2)全局脚本的案例(计算有多少行命令)
    • 四、关于官方文档的使用
    • 五、文章最后

一、关于GeoGebra的脚本

1. 关于脚本的学习

经过查阅一些书籍和文档,我发现还是官方文档最好用,这里给大家放置一下:

  1. GeoGebra脚本介绍(点击蓝色字跳转)
  2. GeoGebra关于JavaScript的API (点击蓝色字跳转)

当然,在工作过程中撰写脚本也踩了不少坑,希望以我的前车之鉴,给大家一些借鉴:

  1. GeoGebra是一个开源的项目,版本更新很快,为了跟上节奏,建议使用网页版操作、观看网页版说明文档(都很全的,查查就有了);
  2. 尽量避免使用中文操作GeoGebra,到了脚本环节更是如此,因为同一个英文指令在不同的版本中对应不同的中文,很有可能你用中文写的脚本,今天能用,明天就用不了了(版本升级,中文对应不上);
  3. 书籍资料只能参考,之前我常参考《唐家军—GeoGebra5使用手册》,但后来随着最新版本的发布,界面布局、按钮功能、脚本的输入方式等等全部都不一样了,个人建议:“参考书中的知识脉络,探索最新的实现方式”。
  4. 国内关于GeoGebra的教学还是比较少的,或许是因为语言、市场占有率、学习难度的原因,使GeoGebra并未全范围铺展开,但无论如何,好的东西不分国界。

在这里插入图片描述

2. 关于GeoGebra脚本

(1)什么是脚本呢?

脚本可以理解为一系列操作的合集,将一堆命令集合起来,点击运行,然后达到某种效果。比如:

用GeoGebra制作一个小球弹跳的效果,如果说第二次弹起是上一次弹起的3/4高度,那么小球从5米落下,多久可以停止跳动?(小于0.01米算停止)
这个过程如果用GeoGebra命令行一行一行的写也可以实现,但是如果用脚本的话也就是几行代码的事情,这就是脚本的威力。

(2)GeoGebra支持的脚本类型

GeoGebra 支持两种脚本语言:GGBScript 和 JavaScript,注意,第五设计所有的脚本均是JavaScript(C++、python、JavaScript这些语言比较通用,学习后可以不局限于某一个平台)。

二、GeoGebra脚本的使用

为了方便介绍,接下来我将实现一个简单功能,用按钮控制点A(1,1)显示或隐藏,感兴趣可以试一下。

1. 打开GeoGebra后的页面

不用费心思去找脚本的按钮了,因为版本更新后没有这个选项,很多人不知道,所以导致被网上的很多教程误导了很久,最后放弃了。

在这里插入图片描述

2.在命令行创建一个点A(1,1)

A=1,1

在这里插入图片描述

3. 创建一个按钮

按钮的属性设置就和普通的点线设置一样,这里就不多说了,但是注意,点击放置按钮后会出现一个脚本框,我们暂时先不写。
在这里插入图片描述
在这里插入图片描述

4. 右键按钮,点击设置,可以打开右侧的设置面板

在这里插入图片描述

5. 在Scripting菜单下选择JavaScript脚本,将代码粘贴到On Click栏里

在这里插入图片描述

// 检查点 A 是否存在
if (ggbApplet.exists("A")) {
    // 获取点 A 的当前可见状态
    var isVisible = ggbApplet.getVisible("A");
    
    // 切换点 A 的可见状态
    ggbApplet.setVisible("A", !isVisible);
} else {
    // 提示点 A 不存在
    ggbApplet.setError("Point A does not exist.");
}

6. 点击按钮就可以开始运行了

在这里插入图片描述

三、GeoGebra脚本使用的注意事项

1. 脚本输入框没有单独的进入选项

书写脚本必须依附于某一个命令行才能进入,切记切记

2. GeoGebra的脚本触发机制有6种

分为:On Click、On Update、On Change、On Drag-end、Global JavaScript、监听器六种,官方的解释是这样的:
在这里插入图片描述
简单来说就是:

不同的对象支持不同类型的脚本;脚本的执行可以通过以下方式触发:

- 点击特定对象(OnClick 选项卡)
- 更新特定对象(当对象的值或属性发生变化时)(OnUpdate 选项卡)
- 改变输入框的内容(OnChange 选项卡)
- 拖动对象后释放鼠标按钮(或在触摸设备上移开手指)(On Drag-end 选项卡)
- 加载文件(对于 JavaScript - Global JavaScript 选项卡)
- JavaScript 监听器(参见参考:JavaScript)

`OnUpdate` 和 `OnChange` 选项卡中输入框脚本的区别在于,`OnUpdate` 选项卡中的脚本仅在从输入框移开焦点
(例如,点击按钮、点击图形视图等)时执行,而 `OnChange` 选项卡中的脚本会在输入框内容发生变化且焦点仍在输入框上时立即执行。

3. 如果想写全局脚本

(1)关于function ggbOnInit() {}的疑惑

可以随机选择一个对象打开其属性,就可以找到全局脚本的输入就可以了。不过很多新手估计会很懵,怎么会有个默认函数,那我是删除还是不删除。
在这里插入图片描述
关于function ggbOnInit() {}代码的解释:

在 GeoGebra 中,ggbOnInit() 是一个特殊的 JavaScript 函数,用于在 GeoGebra 应用程序初始化时执行特定的代码。这个函数在以下情况下被自动调用:

  1. 初始化时: 当 GeoGebra 工具加载或刷新时,ggbOnInit() 函数会被执行。这通常发生在页面加载时,或者当用户重新加载 GeoGebra 应用时。
  2. 设置初始化代码: 可以在 ggbOnInit() 函数中编写需要在应用初始化时执行的 JavaScript 代码。例如,设置默认的对象属性、初始化图形、创建图形对象等。

因此你可以把自己的全局脚本写到这里这个{}花括号里,然后关闭文档,重新打开一次就运行起来了。

(2)全局脚本的案例(计算有多少行命令)

比如我这里有一个统计有多少行命令的脚本:

function ggbOnInit() {
    // 文本对象名称
    var textNames = ['FifthDesign01', 'FifthDesign02', 'FifthDesign03'];
    
    // 初始化计数器
    var totalLines = 0;
    var visibleLines = 0;
    var hiddenLines = 0;

    // 创建文本对象(如果它们不存在)
    for (var i = 0; i < textNames.length; i++) {
        if (!ggbApplet.exists(textNames[i])) {
            ggbApplet.evalCommand(textNames[i] + ' = ""');
        }
    }

    // 获取所有对象的名称
    var objects = ggbApplet.getAllObjectNames();

    // 遍历所有对象,排除指定的文本对象
    for (var i = 0; i < objects.length; i++) {
        var objName = objects[i];
        if (textNames.indexOf(objName) === -1) {  // 不包含在文本名称列表中
            totalLines++;
            if (ggbApplet.getVisible(objName)) {
                visibleLines++;
            } else {
                hiddenLines++;
            }
        }
    }

    // 更新文本对象的内容
    ggbApplet.setTextValue(textNames[0], '总行数: ' + totalLines);
    ggbApplet.setTextValue(textNames[1], '显示的行数: ' + visibleLines);
    ggbApplet.setTextValue(textNames[2], '隐藏的行数: ' + hiddenLines);
}

文章打开后就可以看到数据:
在这里插入图片描述

四、关于官方文档的使用

本篇文章我没有过多的讲解代码的原理,因为涉及到很多专业的编程知识,不过也留给懂编程的伙伴一些学习方式,比如官方文档。

API文档

需要注意的是,官方文档里有这么一句话(所有的方法都是属于ggbApplet对象):

在这里插入图片描述

所以如果想调用API文档里的方法,需要使用ggbApplet对象调用。

比如我上边隐藏/显示点里写了一句代码:

ggbApplet.setVisible("A", !isVisible);

在官方文档的这个地方:

在这里插入图片描述

五、文章最后

需要资料、代做、技术咨询,都可以联系。
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git基本原理介绍及常用指令

文章目录 前言一、Git是什么&#xff1f;集中化的版本控制系统分布式版本控制系统 二、Git基本概念三、git命令操作配置用户信息常用指令 总结 前言 如果你用Microsoft Word写过论文&#xff0c;那你一定有这样的经历&#xff1a;想删除一个段落&#xff0c;又怕将来想恢复找不…

MySQL基础练习题8-每月交易1

题目&#xff1a; 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。 准备数据 分析数据 第一步&#xff1a;用substr()函数来截取到月份&#xff0c;用group by为每个国家分组来查找每个国家 第二步&#xff1a;用count()和sum()来求事务数…

14.FineReport制作带筛选按钮的报表和图表

1.首先连接自带的sqlite数据库&#xff0c;具体方法参考下面的链接 FineReport连接自带的sqlite数据库 2.文件 – 新建普通报表 3.新建数据库查询 4.查询自带的销量表 5.模版&#xff0c;页面设置 6.方向选择横向 7.合并单元格&#xff0c;并添加斜线表头 8.表格中添加字段信…

iPhone手机识别提取藏文字体,推荐《藏语翻译通》藏文OCR识别神器!

如果你正在寻找一款支持藏文OCR识别提取文字的App&#xff0c;我们将向你推荐《藏语翻译通》App&#xff0c;一款专门为iPhone手机用户设计的藏文识别与翻译工具。 功能特点 《藏语翻译通》是一款集藏文OCR识别、藏汉互译、语音识别翻译于一体的应用。用户只需要拿起手机扫一…

【原创】java+ssm+mysql图书信息管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 开发背景&#xff1a; 随着数字化和信…

【排序】快速排序详解

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;排序 个人主页&#xff1a;Celias blog~ 一、快速排序的思想 快速排序的核心思想是&#xff1a; 选定一个…

关于Unity转微信小程序的流程记录

1.准备工作 1.unity微信小程序转换工具,minigame插件,导入后工具栏出现“微信小游戏" 2.微信开发者工具稳定版 3.MP微信公众平台申请微信小游戏,获得游戏appid 4.unity转webgl开发平台,Player Setting->Other Settings->Color Space->Linear 5. unity工…

程序员面试的“八股文“:助力还是阻力?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

知识付费培训考试题库h5小程序开源版开发

知识付费培训考试题库h5小程序开源版开发 企业内部培训与考试课堂系统&#xff0c;支持丰富课程类型&#xff0c;还拥有全面的题型体系&#xff0c;并能自动评分。应用具备响应式设计&#xff0c;加之学习进度跟踪与评论功能&#xff0c;打造互动式学习环境&#xff0c;是现代…

不知道服务器jenkins账户密码,利用自己账户和sudo登录jenkins账户

在服务器上不知道jenkins账户密码&#xff0c;只知道自己账户密码&#xff0c;如何登录jenkins账户 sudo -u jenkins -i

“八股文”在实际工作中是助力、阻力还是空谈

目录 1.概述 1.1.对实际工作的助力 1.2.存在的问题 2.“八股文”对招聘过程的影响 2.1.“八股文”在筛选候选人时的作用 2.2.面试中的比重及其合理性 2.3.如何平衡“八股文”与实际编程能力的考察 3.“八股文”在日常工作中的实用价值 3.1.在团队协作环境中进行有效沟…

Burning In 测试

什么是老化测试&#xff1f; 芯片Burning In测试系统是一种高度集成的测试设备&#xff0c;它结合了温度控制、电源控制、环境控制以及数据采集与分析等多个子系统。该系统能够在可控的条件下对芯片进行长时间的老化测试&#xff0c;从而有效地排查潜在问题&#xff0c;提高芯片…

MySQL 8.0 新特性汇总

文章目录 前言1. 运维管理1.1 可持久化变量1.2 管理员端口1.3 资源组1.4 数据库粒度只读1.5 show processlist 实现方式1.6 加速索引创建速度1.7 控制连接的内存使用量1.8 克隆插件1.9 mysqldump 新增参数1.10 慢日志增强1.11 快速加列1.12 InnoDB 隐藏主键1.13 Redo 配置1.14 …

快速方便地下载huggingface的模型库和数据集

快速方便地下载huggingface的模型库和数据集 方法一&#xff1a;用于使用 aria2/wgetgit 下载 Huggingface 模型和数据集的 CLI 工具特点Usage 方法二&#xff1a;模型下载【个人使用记录】保持目录结构数据集下载不足之处 方法一&#xff1a;用于使用 aria2/wgetgit 下载 Hugg…

java算法day26

java算法day26 207 课程表208 实现Trie(前缀树) 207 课程表 这题对应的知识是图论里的拓扑排序的知识。从题意就可以感受出来了。题目说如果要学习某课程&#xff0c;那么就需要先完成某课程。 这里我描述比较复杂的情况&#xff1a;课程与课程之间也有可能是多对一的场景或者…

实现halcon中的erosion、connection、fill_up

在halcon中&#xff0c;区域R是用一系列行程&#xff08;run&#xff09;的集合表示的&#xff0c;run的形式为&#xff08;Row&#xff0c;ColumnBegin&#xff0c;ColumnEnd&#xff09;&#xff0c;分别对应行坐标、列开始坐标、列结束坐标&#xff0c;这种保存区域的方法被…

C#中重写tospring方法

在C#中&#xff0c;重写ToString方法允许你自定义对象的字符串表示形式。当你想要打印对象或者在调试时查看对象的状态时&#xff0c;重写ToString方法非常有用。 默认情况下&#xff0c;ToString方法返回对象的类型名称。通过重写这个方法&#xff0c;你可以返回一个更有意义…

1.5 队列概念,应用及部分实现

1.基本概念 队列&#xff08; Queue &#xff09;&#xff1a;也是运算受限的线性表。是一种先进先出&#xff08; First In First Out &#xff0c;简称 FIFO &#xff09;的线性表。只允许在表的一端进行插入&#xff0c;而在另一端进行删除。 队首&#xff08; front &am…

C/C++编程-算法学习-数字滤波器

数字滤波器 一阶低通滤波器结论推导11. 基本公式推导2. 截止频率 和 采样频率 推导 实现 二阶低通滤波器实现1实现2推导1推导2 一阶低通滤波器 结论 其基本原理基于以下公式&#xff1a; o u t p u t [ n ] α ∗ i n p u t [ n ] ( 1 − α ) ∗ o u t p u t [ n − 1 ] …

(Arxiv-2023)MobileDiffusion:移动设备上即时文本到图像生成

MobileDiffusion&#xff1a;移动设备上即时文本到图像生成 Paper Title&#xff1a;MobileDiffusion: Instant Text-to-Image Generation on Mobile Devices Paper是谷歌出品 Paper地址 图 1&#xff1a;MobileDiffusion 用于 (a) 文本到图像的生成。(b) Canny 边缘到图像、风…