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

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.rhkb.cn/news/387507.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建基于数据驱动的应用程序与Llamaindex——理解大型语言模型

如果你在阅读这本书&#xff0c;你可能已经探索过大型语言模型&#xff08;LLMs&#xff09;的领域&#xff0c;并且已经认识到它们的潜在应用以及它们的缺陷。本书旨在解决LLMs所面临的挑战&#xff0c;并提供一本实用指南&#xff0c;教你如何使用LlamaIndex构建数据驱动的LL…

【通俗理解】自由能与自由意志的桥梁——从物理到哲学的跨越

【通俗理解】自由能与自由意志的桥梁——从物理到哲学的跨越 自由能与自由意志的类比 你可以把自由能比作一个“能量货币”&#xff0c;它代表着系统能够用来做功的能量。而自由意志则是一个“选择的能力”&#xff0c;它代表着个体在做出决策时的自主性和可能性。 自由能与自由…

HCIA总结

一、情景再现&#xff1a;ISP网络为学校提供了DNS服务&#xff0c;所以&#xff0c;DNS服务器驻留在ISP网络内&#xff0c;而不再学校网络内。DHCP服务器运行在学校网络的路由器上 小明拿了一台电脑&#xff0c;通过网线&#xff0c;接入到校园网内部。其目的是为了访问谷歌网站…

基于 SASL/SCRAM 让 Kafka 实现动态授权认证

一、说明 在大数据处理和分析中 Apache Kafka 已经成为了一个核心组件。然而在生产环境中部署 Kafka 时&#xff0c;安全性是一个必须要考虑的重要因素。SASL&#xff08;简单认证与安全层&#xff09;和 SCRAM&#xff08;基于密码的认证机制的盐化挑战响应认证机制&#xff…

搭建自己的金融数据源和量化分析平台(四):自动化更新上市公司所属一级、二级行业以及股票上市状态

前面做了更新沪深交易所的上市股票列表的读取和更新&#xff0c;但一旦股票退市则需要在数据库里将该股票状态更新为退市&#xff0c;同时附上退市日期&#xff0c;将股票名更改为XX退。 此外深交所下载的xls解析出来是没有上市公司所属的二级行业的&#xff0c;因此还需要建立…

魔众文库-PHP文库管理系统

魔众文库是一套基于PHPMYSQL开发的适用于多平台的文档管理系统&#xff0c;提供doc、ppt、excel、pdf、压缩包、图片、CAD 等资源的在线预览和下载&#xff0c;文件被转换为H5或图片格式&#xff0c;文字放大无失真&#xff0c;响应速度更快速对SEO更友好&#xff0c;收录更快、…

【第二节】python编程基础语法

目录 一、运算符介绍 1.1 算术运算符 1.2 比较运算符 1.3 赋值运算符 1.4 位运算符 1.5 逻辑运算符 1.6 成员运算符 1.7 身份运算符 二、python运算符优先级 三、三大流程结构 四、列表 五、元组 六、字典 一、运算符介绍 1.1 算术运算符 1.2 比较运算符 1.3 赋值…

【传输层协议】UDP和TCP协议

UDP协议 UDP协议全称为User Datagram Protocol&#xff0c;用户数据报协议。UDP协议报文格式如下&#xff1a; 16UDP长度。表示整个数据报的最大长度&#xff0c;即UDP首部UDP数据。这个字段帮助我们确保在网络字节流中获取完整的UDP报文信息。校验和&#xff1a;用于检测数…

巴斯勒相机(Basler) ACE2 dart 系列说明和软件

巴斯勒相机(Basler) ACE2 dart 系列说明和软件

C语言指针·入门用法超详解

目录 1. 什么是指针 2. 指针变量的定义格式 3. 指针的作用 3.1 查询数据 3.2 存储数据&#xff08;修改数据&#xff09; 3.3 操作其他函数中的变量 3.4 函数返回多个值 3.5 函数的结果和计算状态分开 1. 什么是指针 通过内存地址&#xff0c;指向的空间&#…

vue3后台管理系统 vue3+vite+pinia+element-plus+axios上

前言 项目安装与启动 使用vite作为项目脚手架 # pnpm pnpm create vite my-vue-app --template vue安装相应依赖 # sass pnpm i sass # vue-router pnpm i vue-router # element-plus pnpm i element-plus # element-plus/icon pnpm i element-plus/icons-vue安装element-…

C++第一篇 入门基础

目录 1.C的第一个程序 2.c历代版本 3.命名空间 3.1 namespace关键字 namespace的用法&#xff1a; namespace中定义函数 namespace中定义结构体 C中的域&#xff1a; 3.2就近原则 4.命名空间的使用 5.C输入输出 6.缺省参数 全缺省: 半缺省:必须从右往左连续缺省(也…

爆“卷”的AI视频,大厂向左,创企向右

文&#xff5c;白 鸽 编&#xff5c;王一粟 “生成的人物一转身就变成老外&#xff0c;怎么解决呢&#xff1f;” “没有办法&#xff0c;10s中动作大的&#xff0c;人物一致性有问题&#xff0c;只能抽卡&#xff0c;多刷几个&#xff0c;选择一个变化不大的。” 在一个以…

RocketMQ Server Windows安装

RocketMQ阿里开发 开源给apache 官网:RocketMQ 官方网站 | RocketMQ 下载后解压 配置环境变量 注意启动顺序 双击 注意 4.9.0这个版本必须 jdk 8 高了用不了 namesrv是注册中心的作用 broke是核心用于接收生产者消息 存储消息 发送给消费者消息 类似DubboZookeeper…

Java红娘相亲交友平台系统源码小程序

&#x1f495;遇见真爱&#xff0c;从“红娘相亲交友平台系统”开始&#xff01;&#x1f46b; &#x1f339;【精准匹配&#xff0c;缘分不再擦肩而过】 还在为茫茫人海中找不到那个TA而烦恼吗&#xff1f;“红娘相亲交友平台系统”利用先进的大数据分析技术&#xff0c;根据…

匿名内部类

一个类的内部又完整的嵌套了另一个类结构&#xff0c;被嵌套的类称为内部类&#xff0c;嵌套其他的类称为外部类。 类的五大成员&#xff1a;属性、方法、构造器、代码块、内部类 内部类最大的特点的就是直接访问私有属性&#xff0c;并且可以体现类鱼类之间的包含关系。 基本…

北斗三号海上人员落水报警及示位搜救系统升级方案

随着海洋经济的快速发展&#xff0c;海上作业活动日益频繁&#xff0c;人员安全问题也日益凸显。传统的海上救援手段存在诸多不足&#xff0c;如救援响应时间长、定位不准确等。为了提高海上救援的效率和成功率&#xff0c;北斗三号海上人员落水报警及示位搜救系统应运而生。该…

微波传感器 - 从零开始认识各种传感器【第二十期】

微波传感器|从零开始认识各种传感器 1、什么是微波传感器 微波传感器是一种利用微波技术进行探测和测量的传感器。 一般来说&#xff0c;微波是波长为1到1000毫米的电磁波。使用微波传感器&#xff0c;在不接触目标物体的情况下&#xff0c;通过检测和分析微波信号的反射、散…

Matplotlib柱形图大揭秘:让数据‘站’起来,比增高鞋垫还管用!

1. Matplotlib绘制柱形图/柱状图/条形图 柱状图是一种用矩形柱来表示数据分类的图表&#xff0c;柱状图可以垂直绘制&#xff0c;也可以水平绘制&#xff0c;它的高度与其表示的数据成正比关系 # 导包 import numpy as np import pandas as pd import matplotlib.pyplot as p…

机械学习—零基础学习日志(高数16——函数极限性质)

零基础为了学人工智能&#xff0c;真的开始复习高数 这里我们继续学习函数极限的性质。 局部有界性 充分条件与必要条件 极限存在是函数局部有界的充分条件。什么是充分条件&#xff0c;什么是必要条件呢&#xff1f;我这里做了一点小思考&#xff0c;和大家分享&#xff0c…