乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 4

空间坐标转换

[复制链接]

17

主题

68

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2007-5-14 13:26:00 | 显示全部楼层 |阅读模式
空间坐标转换
    编写图形处理程序时,常常要进行坐标转换。坐标转换实际上是坐标矢量的转换。所谓坐标矢量就是把坐标系的原点设为起点,坐标点设为终点的矢量。坐标系有很多种,而我们常常是在直角坐标系中工作,所以在以下的讨论中,坐标系均指直角坐标系。
    设有2个直角坐标系,分别命名为UCS和WCS,如下图。以下讨论这2个坐标系间的坐标转换关系。

mjn23mhv0pn.jpg

mjn23mhv0pn.jpg


1. 空间坐标转换的基本方法:
UCS中的坐标x' 和WCS中的坐标x分别设为,
      x'=(x', y', z')T ,  x=(x, y, z)T
UCS中的单位坐标轴矢量ex, ey, ez和原点O' 均由WCS的成分如下表示
ex =(ex1 , ex2 , ex3 ) T , ey =(ey1 , ey2 , ey3 ) T , ez =(ez1 , ez2 , ez3 ) T , O' = u = (x0 , y0 , z0 ) T
其中,WCS为一标准的直角坐标系,即x,y,z轴的单位坐标轴矢量和原点分别是,
(1, 0, 0) T, (0, 1, 0) T, (0, 0, 1) T和 (0, 0, 0) T。
在以下矢量和矩阵的演算中, 均采用指标的形式进行。
1) WCS中的坐标转换成UCS中的坐标
  当把WCS中的坐标转换成UCS中的坐标时,可以通过如下公式进行计算,
    x'i = aij (xj - uj) = aij xj - aij uj
在以上的计算中,假定坐标系WCS先平移u,再旋转后变成UCS。
又设平移成分为
       Mi = aij uj
则有,
       x'i = aij xj - Mi
式中,

ozwpkzdfwwd.jpg

ozwpkzdfwwd.jpg


为仅有旋转的坐标转换矩阵,即坐标旋转转换矩阵。由上式可以知道,当WCS为一标准的直角坐标系时,UCS的单位坐标轴矢量和坐标旋转转换矩阵a有着等价关系。
2) 坐标转换时,为方便计算常常采用4次元坐标。这时,WCS的坐标和UCS的坐标分别表示为,
    x = (x, y, z, 1)T,  x' = (x', y', z', 1)T
此时,坐标转换矩阵定义为H,H的成分如下:

mur3rkkflfu.jpg

mur3rkkflfu.jpg


利用H,把WCS的坐标转换成UCS的坐标时,如下运算:
    x'i = Hij xj
3) UCS中的坐标转换成WCS中的坐标
  这是上述变换的逆运算,即
       xi = a-1ij (x'j - u'i )
整理后,
       xi = aji x'j + ui
在上式的计算中,假定坐标系UCS先平移u',再旋转后变成WCS。
当用4次元坐标时,坐标转换矩阵定义为H 的逆矩阵H-1如下:

cm4of4nlbro.jpg

cm4of4nlbro.jpg


利用H-1可由下式把UCS的坐标(x',  y',  z') T转换成WCS(x,  y,  z) T的坐标,
       xi = H-1ij x'j
另外, 在ACAD VBA中, 通过GetUCSMatrix() 方法获得的坐标转换矩阵即为H-1
4) HとH-1 (inverse matrix)的关系
为表示简洁, 设G=H-1
H和G有如下关系:
       (1)  i=1,3 ; j=1,3
            Hij= Gji
       (2)  i=1,3 ( j=4) ; k=1,3
            Hi4= - Gki Gk4
            Gi4= - Hki Hk4
       (3)  i=4 ; j=1,4
            Hij= Gij
   由以上运算可以看出,坐标转换计算时,求坐标转换矩阵是关键。以下讨论坐标转换矩阵的计算方法。
2. 坐标旋转转换矩阵a的计算方法
   在讨论绕不同的坐标轴旋转所对应的坐标旋转转换矩阵时,旋转角度的符号由以下方法确定:当由旋转角按右手法则确定的旋转方向和旋转轴正方向一致时,取正号;相反则取负号。
1)  设仅绕x轴旋转g 角度的坐标旋转转换矩阵为ax, 仅绕y轴旋转b 角度的坐标旋转转换矩阵为ay, 仅绕z轴旋转q 角度的坐标旋转转换矩阵为az, 它们的成分分别如下:

w5j33biadop.jpg

w5j33biadop.jpg


2) 仅有旋转的一般情况:即先绕x1轴旋转q1,再绕旋转后的x2轴旋转q2,...,再绕前面旋转后的xi轴旋转qi,...,最后再绕前面旋转后的xn轴旋转qn的坐标旋转转换矩阵可由以下公式算出:
      aij= anik an-1kl···aipq···a1mj
由此可知道,最后旋转的坐标旋转转换矩阵在最前,最先旋转的坐标旋转转换矩阵在最后,和实际旋转的顺序相反。
例如,先绕z轴旋转q ,再绕旋转后的y轴旋转b,最后再绕经过前面2次旋转后的x轴旋转g 的坐标旋转转换矩阵a
       aij= axik aykl azlj
由于以上是矩阵的运算,所以坐标旋转转换矩阵a与旋转的顺序有关。
3. 同时有旋转和平移的坐标转换矩阵的计算方法
    一般的坐标转换,可能同时有旋转和平移的情况,这时把坐标旋转转换矩阵a改为由上述定义的H,其余的和仅有旋转的一般情况一样运算,最后即可求出4次元的坐标转换矩阵H。
由以上的结果,可以得出一般情况的坐标转换。即先进行坐标转换1,
   再在第一次转换的基础上进行坐标转换2,...,再在第i-1次转换的基础上进行坐标转换i,...,最后在第n-1次转换的基础上进行坐标转换n的坐标转换矩阵H可由以下公式算出
      Hij= Hnik Hn-1kl···Hipq···H1mj
最后进行的坐标转换矩阵在最前,最先进行的坐标转换矩阵在最后,和实际坐标转换的顺序相反。由于以上的矩阵运算知,坐标转换矩阵H与旋转以及平移的顺序都有关。
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2007-5-14 16:44:00 | 显示全部楼层
好帖子,我对这个题目做了一定的工作,希望与楼主就具体内容进行切磋.
回复

使用道具 举报

55

主题

282

帖子

5

银币

中流砥柱

Rank: 25

铜币
502
发表于 2007-5-14 19:08:00 | 显示全部楼层
只要算法清楚了,程序就可以实现啦!呵呵!
回复

使用道具 举报

32

主题

52

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2010-8-17 06:50:00 | 显示全部楼层
在CAD中TranslateCoordinates 应用更简单,收藏这个帖子.
回复

使用道具 举报

3

主题

103

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2010-8-22 21:00:00 | 显示全部楼层
VBA本身就提供了矩阵转换的函数
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-1 08:46 , Processed in 0.251920 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表