该练习的目标是编写一个求解一元二次方程的VSL脚本。给定表达式ax^2+bx+c = 0及a,b,c的值,求x。算法如下:
delta = b^2-4ac
如果 delta < 0
那么
无解
否则
就有一个或两个解:
x' = (-b+sqrt(delta))/2a
x'' = (-b-sqrt(delta))/2a
新建一个Virtools作品,创建一个脚本,并像之前的两个练习一样创建一个 名为“Run VSL” 的BB到脚本中。将这个BB重命名为"Solve 2nd Degree"(不包括引号),切换到 VSL Script Manager,添加3个浮点(float)类型的pIn参数,分别命名为:a、b、c;及2个个浮点(float)类型的pOut参数,分别命名为x1、x2。
输入以下代码到代码窗口中:void main(){ if (!a) return; float delta = pow(b, 2)-4*a*c; if (delta >= 0) { x1 = (-b+sqrt(delta))/2*a; x2 = (-b-sqrt(delta))/2*a; }}
编译这个VSL脚本,切换到Schematic 工作区中,给以下3个pIn参数赋值:a = 3
b = 5
c = -3
运行你的VSL脚本,检查pOut;你应该会看到以下结果:x1 = 4.21537 x2 = -19.2154。虽然这个VSL脚本功能是正确的,但还可以进行优化。当前的delta的开方运算被执行了两次。然而可以让它只运算一次,只要先存储这个值,在后面的脚本中重新使用它就可以了。
修改你的VSL脚本为:void main(){ if (!a) return; float delta = pow(b, 2)-4*a*c; if (delta >= 0) { float sqrtDelta = sqrt(delta); x1 = (-b+sqrtDelta)/2*a; x2 = (-b-sqrtDelta)/2*a; }}
再次编译VSL脚本,并运行它。你很可能发现没有什么不同。这是正常的,因为这个VSL脚步太小了。然而,就是像这样的很多细小优化可以大大减少作品的整个执行时间(这当然是件好事情)。这个脚本可以更进一步的优化,如果x的值不需要计算的话:当‘a’等于0时,这个脚本可以停止,因为这种情况已经不是一元二次方程了。
假如delta是负数时,这个脚本可以停止,因为无解。
为了支持这种情况,你可添加两个bOut端口。
在VSL Script Manager右边,右击bOut并选择Add bOut。重复此操作,再加入一个bOut。然后将这两个bOut重命名为“Not Second Degree”和“No Solution”。请注意VSL Script Manager会将这两个bOut重命名为:"Not_Second_Degree" 和"No_Solution" - VSL不支持带空格的变量名。同时也注意到bOut的类型是布尔(TRUE为on,FALSE为off)。并且这个类型不能改变。
修改代码如下:void main(){ if (!a) { Not_Second_Degree = TRUE; return; } float delta = pow(b, 2)-4*a*c; if (delta >= 0) { float sqrtDelta = sqrt(delta); x1 = (-b+sqrtDelta)/2*a; x2 = (-b-sqrtDelta)/2*a; } else { No_Solution = TRUE; return; } Out = TRUE;}
现在,你的脚本有了三个可以被激活的bOut,根据输入的数据在必要的时候做出响应。注意:当VSL脚本只有一个bOut的时候,不需要显式激活该bOut,当VSL脚本执行完代码以后它被自动处理。然而,当有两个或更多的bOut时,你就必须书写脚本,以便在恰当的时候显式地激活恰当的bOut。
分享到:
相关推荐
在压缩包文件"Virtools-走迷宫"中,可能包含了以下内容: 1. Virtools工程文件:这是Virtools项目的主要文件,包含了场景布局、行为脚本、资源引用等所有信息。用户可以使用Virtools软件打开此文件,查看和修改项目...
通过SDK,你可以访问到Virtools的各种内部函数和对象,包括与播放器界面和渲染引擎交互的部分。 在实际操作中,你可能需要将CKKernelInit.lib链接到你的项目中,然后调用相应的API来初始化和控制播放器的行为。这...
### Virtools学习资料:VSL脚本语言入门与实践 #### 一、VSL脚本语言简介 Virtools是一款强大的3D应用开发平台,广泛应用于游戏开发、虚拟现实、建筑可视化等多个领域。Virtools提供了丰富的功能和工具集,其中VSL...
Virtools 是一款强大的交互式3D应用开发工具,它的VSL(Virtools Script Language)是内置的脚本语言,而SDK(Software Development Kit)则提供了更底层的编程接口。为了确保代码的质量、可读性和可维护性,遵循...
virtools 文件 实例文件 源文件virtools 文件 实例文件 源文件virtools 文件 实例文件 源文件
- **脚本语言**:Virtools脚本语言(VSL),用于编写自定义行为。 4. **参数** - **概述**:用于控制对象行为的数据值。 - **参数操作**:通过运算符改变参数的值,实现动态调整对象的状态。 5. **属性** - **...
通过对源代码的学习,开发者可以学习到如何使用VirTools内置的语言(如BCML或BScript)来编写游戏逻辑,包括角色移动、碰撞检测、用户输入响应等核心功能。例如,`collision_final.cmo`可能是一个关于碰撞检测的最终...
Virtools漫游脚本程序是一种基于Virtools软件的高级编程技术,主要用于创建虚拟现实(VR)环境中的交互式漫游体验。...通过深入学习和实践,开发者可以利用Virtools的强大力量,创造出生动且引人入胜的VR应用。
本书面向已经有一定编程经验,尤其是Virtools基础的读者,旨在通过学习VSL脚本和SDK开发,提升开发者对Virtools功能的挖掘和利用能力。VSL脚本语言是Virtools中的核心部分,初学者可以从基础语法入手,逐步了解和...
VSL脚本是Virtools中重要的编程手段,通过编写VSL脚本,开发者可以实现更复杂的逻辑和交互功能。 在VSL讲解完毕后,紧接着是SDK开发包的学习。这一部分适合有一定C/C++编程基础的读者,特别是对VC2003编译器和STL、...
virtools 室内漫游 实例文件 可修改 漫游 virtools 室内漫游 实例文件 可修改 漫游
首先,理解“封装VT文件到一个EXE文件”意味着将Virtools项目的所有必要组成部分,包括场景、资源、脚本等,整合到一个单一的可执行文件中。这样做的好处是用户无需安装Virtools软件即可运行应用程序,简化了分发和...
2. **虚拟对象定位**:学习如何在Virtools中设置虚拟对象的位置和方向,使其与真实世界的标记对齐,这涉及到空间坐标系的理解和转换。 3. **事件驱动编程**:利用Virtools的事件系统,当标记被检测到或失去追踪时...
它提供了多种方式进行交互式体验的创建,包括VSL(Virtools脚本语言)、脚本流程图以及SDK(软件开发工具包)。 VSL,全称为Virtools Script Language,是一种强大的脚本语言,允许开发者深入到Virtools SDK的底层...
总的来说,"麦当劳网络智力游戏"是一个基于VirTools的实例,它展示了该软件的强大功能和易用性,同时也为我们提供了一次学习3D游戏开发和品牌营销策略的宝贵机会。通过对源文件的深入探索,开发者可以掌握更多关于3D...
VSL是一种专为Virtools设计的脚本语言,允许程序员深入控制交互逻辑。 4. **渲染引擎** 渲染引擎负责将3D场景转化为可视图像,支持实时预览和最终输出。开发者可以通过SDK定制渲染引擎,以满足特定需求。 5. **...