加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

matlab实现三维几何变换

(2011-10-06 22:25:59)
标签:

数据结构

几何变换

平移

程序代码

缩放

分类: Matlab

最近搞了一个matlab实现三维的几何变换的程序,挺好玩的!

也确实发现一个问题,就是程序的数据结构要事先设计好,如果数据结构没有事先想好,到后面发现数据结构有问题,再改就是大改了,而刚开始的时候如何设计数据结构呢?发现面向对象的设计思想是最好的,毕竟现实中面对的就是各种各样的对象,以对象的思考方式设计数据结构才是最自然、最有效的。

通过程序的编写,对OpenGL的实现有了一点新的认识,绝对变换、相对变换等等,不错。

运行程序,开始是一个正方体绕(1,1,1)向量的旋转360°,然后是做一些简单的变换,结果如下

imageimage

然后是做一个平移变换

image

然后是相对旋转

image

相对缩放

image

再做平移

image

 

主程序代码如下

function main
clc
clear all
close all

% 全局坐标系
fig = ConstructGlobalAxes();

% 数据
verts = [ ...
    -1      -1      -1;
         -1      -1;
              -1;
    -1           -1;
    -1      -1      1;
         -1      1 ;
              1;
    -1           1;];
faces = [ ...
             3;
             3;
             5;
             2;
             8;
             2;];
cdata = hsv(size(verts, 1));

% 构造对象
hobj = ConstructObj(fig, verts, faces, cdata); % 变换对象

% 平移变换
% Translation(hobj, 2, 2, 0)
% 缩放变换
% Scale(hobj, 2, 2, 1)
% 错切变换
% Shear(hobj, 'x', 'y', 0.5)
% Shear(hobj, 'x', 'z', 0.5)
% 旋转变换
% RotationAxis(hobj, 'z', 45) % 绕坐标轴旋转
% RotationOriginAxis(hobj, [1 1 1], 45)
% Points = [1 1 1; 2 2 2];
% RotationAnyAxis(hobj, Points', 45);

% 各种变换
Points = [0 0 0; 1 1 1];
for i = 1:360/6
    RotationAnyAxis(hobj, Points', 6, 'r'); % 再相对旋转
    drawnow
end

pause(1)
Translation(hobj, 2, 2, 0); % 先绝对平移
pause(0.5)
RotationAnyAxis(hobj, Points', 45, 'r'); % 再相对旋转
pause(0.5)
Scale(hobj, 2, 2, 1, 'r'); % 再相对缩放
pause(0.5)
Translation(hobj, 2, 2, 0, 'r'); % 最后再相对平移
end

其他程序代码比较长,400行,就不在这里显示了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有