顺便说一句,这张网页中没有图片,你所看到的公式都是使用Html语言用文本创建的。纯手工制作,没用FrontPage,差点儿没把我累死。
  这一次,我们使用Quick Basic在屏幕上画一个单叶回转双曲面的散点模型。使用上、下、左、右、加、减键可以旋转图形,回车键切换投影模式(斜二测画法和正等测画法),“s”键打开/关闭坐标轴,空格切换描点密度。修改一下程序中的图形方程还可以实现其它曲面的演示,挺有意思的。
  单叶回转双曲面的方程,想必大家都会写了:
  z2=
 x2
 a2
+
 y2
 b2
-1
  根据这个方程,取一系列x、y值并根据这些值算出z的值,很容易求出一系列空间中的点。但是,怎样把这一系列空间中的点画到一个平面——屏幕上呢?
  把空间中的点投射到屏幕上,有两种方法,一种叫轴测图,一种叫透视图。透视图不是线性投影,计算起来比较复杂,这次就不介绍了。我们就使用轴测图画这个图形。
  常用的轴测图有两种,一种叫斜二测画法,一种叫正等测画法。它们都是线性变换,矩阵如下:
  斜二测画法投影矩阵:
(
2
4
2
4
0 )
1 0 0
0 1 0
  正等测画法投影矩阵:
(
3
2
1
2
0 )
3
2
1
2
0
0 1 0
  把空间坐标看作行向量,用投影矩阵右乘坐标向量,就能把空间中的点投影到x^y平面上。
  实际使用中,我们往往需要将图形旋转一定的角度,以便观察图形的各个方向。容易证明,旋转变换也是线型变换。将一个图形沿x^y方向旋转α弧度,沿y^z方向旋转β弧度,沿z^x方向旋转γ弧度,该变换的矩阵为:
( cosα·cosγ-sinα·sinβ·sinγ -sinα·cosβ cosα·sinγ+sinα·sinβ·cosγ )
sinα·cosγ+cosα·sinβ·sinγ cosα·cosβ sinα·sinγ-cosα·sinβ·cosγ
-cosβ·sinγ sinβ cosβ·cosγ
  用这个矩阵右乘坐标行向量,即可实现图形的旋转。注意,必须先旋转后才能进行投影,投影之后图形已经变成了平面,就不能再进行空间旋转了。
  由于Basic语言的速度比较慢,为了达到更好的效果,在提供Basic程序的同时,我又提供了一份用Turbo C不++写的,可以对照着看看。Exe文件是用C代码编译的,需要Egavga.bgi的支持,运行时请把它和Exe放在同一目录下。下载了看看吧!