数据图形化(Data Visualization)是让辛苦采集或计算而得的数据产生真正价值的有效工具。因为我们需要的往往不是数据本身,而是数据所呈现的事物的本质。通过数据图形化,可以获得事物变化的趋势,转折点等等。对于以函数形式体现的数据,这些本质表现为单调性和极值等等。实际中采集或计算的的数据经常以一元函数的形势得到。一元函数是十分容易理解的。即使不进行图形化,一个给定的一元函数的性质也可以通过简单的取样获得。而且其图形化也是比较简单的。更加复杂的情况是二元函数。对于给定的二元函数,通过直接观察其解析形势,往往不能想象出其性质。而对其取样又比较困难——沿着其(x,y)平面的哪些方向进行取样往往只有得知其主要性质之后才能决定。因此对二元函数的图形化是十分有用的。看到一个二元函数的曲面,用户可以得到直观地感受,分析出在某一区域的极点和平坦区等。由于具有两个自由变量,对二元函数的可视化是一个三维的曲面。在计算机的二维显示器上显示三维图形需要进行三维渲染(3D Redering)。这种工作往往借助3D引擎达到,比如OpenGL和Direct3D。对于二元函数图形化这个工作,我个人认为使用全功能的3D引擎太过浪费(too expensive)。另外几个让我个人感觉不爽的因素是,常见的3D引擎都是C语言的,而且仅仅支持3D处理,相应的窗口处理还是必须利用特定平台的本地接口(native APIs)。而3D引擎的和本地接口的结合又是各不相同。Windows对OpenGL的支持比较差,Direct3D又不能跨平台。Java3D可能最符合要求,但是Sun对这个扩展包越来越不上心了。所有这些不利,如果对于一个游戏的开发来说,与3D引擎提供的便利相比,都是不重要的。但是对于一个简单的二元函数可视化的任务来说,都是too expensive的体现。我可不想为我的程序写一个硬件抽象层(HAL)来interface不同的引擎,也不想为下一个Java或者Windows版本重写代码。编写一个二元函数图形化的库,这个问题我考虑了大约一年了。其间Java3D,OpenGL都考虑过,因为不能达到预期的目标又都放弃了。我的目标是:
1. 图形化二元函数。
2. 保持跨平台性,不因为平台的转换而修改代码。
3. 保持低层接口(underlying supporting APIs)的稳定,不使用频繁修改的API。
4. 重视静态图形质量。放弃动画性能。
5. 不需要音效。
6. 暂时不支持用户交互。我今天提供的Figure 3D程序是完全基于J2SE的——这是我能获得的最稳定的APIs,没有使用其他的3D引擎。而且显示效果还可以接受。我会继续改进。大家如果有兴趣可以发信给我[email protected]