`
isiqi
  • 浏览: 16483521 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

通过实例学习Virtools脚本语言VSL - 解二次方程

阅读更多

该练习的目标是编写一个求解一元二次方程的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

  1. 新建一个Virtools作品,创建一个脚本,并像之前的两个练习一样创建一个 名为“Run VSL” 的BB到脚本中。将这个BB重命名为"Solve 2nd Degree"(不包括引号),切换到 VSL Script Manager,添加3个浮点(float)类型的pIn参数,分别命名为:a、b、c;及2个个浮点(float)类型的pOut参数,分别命名为x1、x2。
  2. 输入以下代码到代码窗口中:
    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;
    }
    }
  3. 编译这个VSL脚本,切换到Schematic 工作区中,给以下3个pIn参数赋值:
    • a = 3
    • b = 5
    • c = -3
  4. 运行你的VSL脚本,检查pOut;你应该会看到以下结果:x1 = 4.21537 x2 = -19.2154。
    虽然这个VSL脚本功能是正确的,但还可以进行优化。当前的delta的开方运算被执行了两次。然而可以让它只运算一次,只要先存储这个值,在后面的脚本中重新使用它就可以了。
  5. 修改你的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;
    }
    }
  6. 再次编译VSL脚本,并运行它。
    你很可能发现没有什么不同。这是正常的,因为这个VSL脚步太小了。然而,就是像这样的很多细小优化可以大大减少作品的整个执行时间(这当然是件好事情)。
    这个脚本可以更进一步的优化,如果x的值不需要计算的话:
    • 当‘a’等于0时,这个脚本可以停止,因为这种情况已经不是一元二次方程了。
    • 假如delta是负数时,这个脚本可以停止,因为无解。
    为了支持这种情况,你可添加两个bOut端口。
  7. 在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)。并且这个类型不能改变。
  8. 修改代码如下:
    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;
    }
  9. 现在,你的脚本有了三个可以被激活的bOut,根据输入的数据在必要的时候做出响应。
    注意:当VSL脚本只有一个bOut的时候,不需要显式激活该bOut,当VSL脚本执行完代码以后它被自动处理。
    然而,当有两个或更多的bOut时,你就必须书写脚本,以便在恰当的时候显式地激活恰当的bOut。
分享到:
评论

相关推荐

    Virtools例子----走迷宫(附带max模型、Virtools源文件)

    在压缩包文件"Virtools-走迷宫"中,可能包含了以下内容: 1. Virtools工程文件:这是Virtools项目的主要文件,包含了场景布局、行为脚本、资源引用等所有信息。用户可以使用Virtools软件打开此文件,查看和修改项目...

    Virtools播放器去水印Lib-5.0.0.8版

    通过SDK,你可以访问到Virtools的各种内部函数和对象,包括与播放器界面和渲染引擎交互的部分。 在实际操作中,你可能需要将CKKernelInit.lib链接到你的项目中,然后调用相应的API来初始化和控制播放器的行为。这...

    virtools学习资料

    ### Virtools学习资料:VSL脚本语言入门与实践 #### 一、VSL脚本语言简介 Virtools是一款强大的3D应用开发平台,广泛应用于游戏开发、虚拟现实、建筑可视化等多个领域。Virtools提供了丰富的功能和工具集,其中VSL...

    Virtools的VSL和SDK编程编码规则

    Virtools 是一款强大的交互式3D应用开发工具,它的VSL(Virtools Script Language)是内置的脚本语言,而SDK(Software Development Kit)则提供了更底层的编程接口。为了确保代码的质量、可读性和可维护性,遵循...

    virtools 文件 实例文件 源文件

    virtools 文件 实例文件 源文件virtools 文件 实例文件 源文件virtools 文件 实例文件 源文件

    virtools基本教材

    - **脚本语言**:Virtools脚本语言(VSL),用于编写自定义行为。 4. **参数** - **概述**:用于控制对象行为的数据值。 - **参数操作**:通过运算符改变参数的值,实现动态调整对象的状态。 5. **属性** - **...

    virtools实例资源

    通过对源代码的学习,开发者可以学习到如何使用VirTools内置的语言(如BCML或BScript)来编写游戏逻辑,包括角色移动、碰撞检测、用户输入响应等核心功能。例如,`collision_final.cmo`可能是一个关于碰撞检测的最终...

    Virtools漫游脚本程序

    Virtools漫游脚本程序是一种基于Virtools软件的高级编程技术,主要用于创建虚拟现实(VR)环境中的交互式漫游体验。...通过深入学习和实践,开发者可以利用Virtools的强大力量,创造出生动且引人入胜的VR应用。

    virtools开发之底层篇

    本书面向已经有一定编程经验,尤其是Virtools基础的读者,旨在通过学习VSL脚本和SDK开发,提升开发者对Virtools功能的挖掘和利用能力。VSL脚本语言是Virtools中的核心部分,初学者可以从基础语法入手,逐步了解和...

    Virtools开发

    VSL脚本是Virtools中重要的编程手段,通过编写VSL脚本,开发者可以实现更复杂的逻辑和交互功能。 在VSL讲解完毕后,紧接着是SDK开发包的学习。这一部分适合有一定C/C++编程基础的读者,特别是对VC2003编译器和STL、...

    virtools 室内漫游 实例文件 可修改

    virtools 室内漫游 实例文件 可修改 漫游 virtools 室内漫游 实例文件 可修改 漫游

    Virtools-File-Package.rar_virtools

    首先,理解“封装VT文件到一个EXE文件”意味着将Virtools项目的所有必要组成部分,包括场景、资源、脚本等,整合到一个单一的可执行文件中。这样做的好处是用户无需安装Virtools软件即可运行应用程序,简化了分发和...

    Virtools增强现实专用BB-ARToolkit BB

    2. **虚拟对象定位**:学习如何在Virtools中设置虚拟对象的位置和方向,使其与真实世界的标记对齐,这涉及到空间坐标系的理解和转换。 3. **事件驱动编程**:利用Virtools的事件系统,当标记被检测到或失去追踪时...

    virtools我的最爱

    它提供了多种方式进行交互式体验的创建,包括VSL(Virtools脚本语言)、脚本流程图以及SDK(软件开发工具包)。 VSL,全称为Virtools Script Language,是一种强大的脚本语言,允许开发者深入到Virtools SDK的底层...

    virtools 源文件 实例 麦当劳网络智力游戏

    总的来说,"麦当劳网络智力游戏"是一个基于VirTools的实例,它展示了该软件的强大功能和易用性,同时也为我们提供了一次学习3D游戏开发和品牌营销策略的宝贵机会。通过对源文件的深入探索,开发者可以掌握更多关于3D...

    VirTools教程

    VSL是一种专为Virtools设计的脚本语言,允许程序员深入控制交互逻辑。 4. **渲染引擎** 渲染引擎负责将3D场景转化为可视图像,支持实时预览和最终输出。开发者可以通过SDK定制渲染引擎,以满足特定需求。 5. **...

Global site tag (gtag.js) - Google Analytics