坐标变换
2008-02-26 20:28:17 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁惧墽鎳撻—鍐偓锝庝簻椤掋垺銇勯幇顖毿撻柟渚垮妼椤粓宕卞Δ鈧獮濠勭磽閸屾艾鈧懓顫濋妸鈺佺疅缂佸顑欓崥瀣煕椤愵偅绶氱紓鍐╂礋濮婂宕掑▎鎴М濠电姭鍋撻梺顒€绉甸幆鐐哄箹濞n剙濡肩紒鎰殜閺屸€愁吋鎼粹€茬敖婵炴垶鎸哥粔鐢稿Φ閸曨垰鍐€妞ゆ劦婢€濞岊亪姊虹紒妯诲蔼闁稿海鏁诲濠氭晲婢跺﹤宓嗛梺缁樺姈缁佹挳宕戦幘璇叉嵍妞ゆ挻绋戞禍鐐叏濡厧浜鹃悗姘炬嫹

摘要
坐标变换是图形学中很基本的操作。无论绘制二维还是三维图形都会遇到。下面将会讲到:
- 如何根据坐标架进行点的坐标变换。
- 如何根据坐标架生成变换矩阵。
- 如何通过矩阵作点的坐标变换。
- 曲线、曲面方程如何作变换。
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 的点。
更多精彩
赞助商链接