三、三维实体符号形成方法
三维实体有三维坐标,将三维实体表示到二维制图平面要经过投影转换,在地图制图中主要采用透视转换。在透视立体图中采用一至两组平行剖面线表示曲面(图 5-9)。透视转换根据主灭点(直线上无穷远点的透视) 的个数可分为一点透视、二点透视和三点透视(图 5-10)。下面介绍三点透视的计算方法。
当视点在空间任意位置时,用一个坐标系描述透视投影过程比较麻烦, 因此引入另一个过渡坐标系——观察坐标系。观察坐标系原点为视点,z 轴方向即视线方向,观察平面(视平面)与 z 轴平行,z 轴与视平面的交点为视心。此时透视投影的过程是先把用户坐标系下的点变换成观察坐标系的点,再把观察坐标系下的点变换成屏幕坐标系中的点。只要已知用户坐标系中物体各点的坐标、视点位置和视线方向,就可以在屏幕上产生该物体的透视投影图。
采用齐次坐标,设用户坐标系中的点坐标为[x,y,z,1],观察坐标系中相应点坐标为[xw,yw,zw,1],完成这种变换的关系用矩阵 V 表示,则
[xe,ye,ze,1]=[xw,yw,zw,1]·
如已知视点在用户坐标系中的位置(a,b,c),并规定 x 在 zw=c 平面上,V 矩阵的推导如下:
- 把用户坐标系作平移变换,以视点为原点构成新坐标系(图 5-11
(a)),变换式为
1 0 0 0
0 1 0 0
T1 =
0 0 1 0
− a − b − c 1
- 令新坐标系绕 x 轴逆时针旋转 90°(图 5-11(b)),变换式为
1 0 0 0
1 0 0 0
T = 0
cos90° − sin90° 0 = 0 0
− 1 0
2 0 sin 90° cos 90° 0 0 1 0 0
0 0 0 0
0 0 0 1
- 将坐标系绕 y 轴顺时针旋转θ角(图 5-11(c)),使 z′反向指向
z轴,因为θ>180°,令v = a 2 + b2 ,则
cosθ=-b/v,sinθ=a/v,变换为
cos θ 0 sinθ 0 − b / v 0 a / v 0
0 1 0 0 0 1 0 0
T3 =
=
− sin θ 0
cosθ
0 − a / v 0
− b / v 0
0 0 0 1 0 0 0 1
- 令坐标系绕 x 轴顺时针旋转ϕ角(图 5-11(d)),使 z′反向指向
原点O,令u = a 2 + b2 + c2 ,则
cosϕ=v/u,sinϕ=c/u,变换式为
1 0 0 0 1 0 0 0
0 cosϕ
sin ϕ
0 0
v / u c / u 0
T4 =
=
0 − sin ϕ
cos ϕ
0 0
- c / u v / u 0
0 0 0 0 0 0 0 1
- 经上述四步变换 z′反向指向原点,因此对 z′求反(图 5-11(e))
1 0 0 0
0 1 0 0
=
0 1
− 1 0
0 0 0 1
经上述推导,用户坐标系中的点已变换为观察坐标系中的坐标,令V=T1T2T3T4T5,则
b / v
a / v V =
0
-
ac / uv
-
bc / uv v / u
− a / u 0
- b / u
− c / u 0
0 0 0 1
为了在屏幕上产生透视投影图,要将观察坐标系中的坐标转换为屏幕坐标,若设屏幕中心为屏幕坐标系的原点,观察坐标系的 z 轴垂直穿过屏幕中心(图 5-12),根据三角形的相似性,可得到观察坐标系中的坐标和屏幕坐标的转换关系:
D/ze=xs/xe, D/ze=ys/ye, xs=D*xe/ze, ys=D*ye/zc。