摘要
坐标变换是图形学中很基本的操作。无论绘制二维还是三维图形都会遇到。下面将会讲到:
- 如何根据坐标架进行点的坐标变换。
- 如何根据坐标架生成变换矩阵。
- 如何通过矩阵作点的坐标变换。
- 曲线、曲面方程如何作变换。
1、如何根据坐标架进行点的坐标变换
首先坐标架定义成:
struct PNT3D{
double x,y,z;
};
struct FRAME{
PNT3D O, OX, OY, OZ;
};
假设有一个点 p 定义在 frame 所在坐标系 WC(World Coordinate) 之中,也就是说 p 在 frame 之外。为了将 p 转入 frame,我们首先需要作平移 p1 = p - frame.O; 这个时候 p1 相当于定义在一个将 WC 平移到 frame.O 的一个坐标架之中。这个坐标架和 frame.O 供用坐标原点,但是三个坐标轴并不一定相同。为了得到 frame 中的三个坐标分量我们只须将 p1 和三个基矢量作点积 :
WC->frame 变换公式:
p2.x = p1*frame.OX = (p-frame.O)*frame.OX;
p2.y = p1*frame.OY = (p-frame.O)*frame.OY;
p2.z = p1*frame.OZ = (p-frame.O)*frame.OZ;
其中 * 代表点积。这里所得到的 p2 就是 WC 中的 p 在 frame 中对应的点。到此为止我们完成了电从坐标架之外变换到坐标架内。同样的,我们也可以采用简单的方法把点从坐标架内变换到坐标架之外。假设 p 是 frame 之内的点,首先
p1 = p.x*frame.OX + p.y*frame.OY + p.z*frame.OZ;
上面的公式将 p 的各个分量作为权值将三个坐标架的基矢量累加起来,得到的 p1 相当于平移 WC 和 frame 重合坐标原点的坐标架中的点。接下来,自然是处理平移
frame->WC 变换公式:
p2 = p1 + freame.O;
= p.x*frame.OX + p.y*frame.OY + p.z*frame.OZ + frame.O;
p2 就是转换到 WC 的点。