声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3036|回复: 5

[编程技巧] 如何用matlab画正二十面体

[复制链接]
发表于 2010-3-4 11:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位前辈好:
       本人想用matlab画一个正二十面体,但是总是找不到matlab中能够画多面体的函数,不知道编程时该从哪个角度考虑。各位前辈可否帮忙解答一下。谢谢!
回复
分享到:

使用道具 举报

发表于 2010-3-4 22:30 | 显示全部楼层
运行下面的代码可画正12面体,正20面体与之类似,自己试试吧

  1. phi = (1+sqrt(5))/2;
  2. vert = [1/phi phi 0;-1/phi phi 0;1/phi -phi 0;-1/phi -phi 0];
  3. vert = [vert;phi 0 1/phi; -phi 0 1/phi;phi 0 -1/phi;-phi 0 -1/phi];
  4. vert = [vert;0 1/phi phi;0 -1/phi phi;0 1/phi -phi;0 -1/phi -phi];
  5. vert = [vert;1 1 1;1 -1 1; 1 1 -1;-1 1 1;-1 -1 1;-1 1 -1;-1 -1 -1;1 -1 -1];
  6. fac = [3 4 17 10 14
  7.        6 8 19 4 17
  8.        9 16 6 17 10
  9.        5 13 9 10 14
  10.        14 3 20 7 5
  11.        3 4 19 12 20
  12.        8 18 11 12 19
  13.        16 2 18 8 6
  14.        7 20 12 11 15
  15.        2 1 15 11 18
  16.        13 5 7 15 1
  17.        9 13 1 2 16];
  18. h = patch('faces',fac,'vertices',vert,'FaceColor','r');
  19. view(3);    %设置视角
  20. %set(h,'FaceAlpha',0.5);    %设置正12面体透明度
  21. light('Posi',[0 -1.7 0.5]);
  22. lightangle(-45,60);     %建立光源并设置光源视角
  23. lighting flat;    %设置光照模式
  24. material metal;    %设置面的反射属性
  25. axis equal;    %设置坐标轴显示方式
  26. %xlabel('X'); ylabel('Y'); zlabel('Z');    %为坐标轴加标签
  27. axis off
复制代码
效果如图:

[ 本帖最后由 xiezhh 于 2010-3-4 22:40 编辑 ]
正十二面体.jpg

评分

1

查看全部评分

发表于 2010-3-4 23:14 | 显示全部楼层
个人以为画正多面体的重点, 应该是那些顶点的座标如何求得, 怎奈我忘了干净了! 汗颜:@L
本想上网查查, 又有点懒!:loveliness:
 楼主| 发表于 2010-3-5 14:55 | 显示全部楼层

回复 沙发 xiezhh 的帖子

非常感谢前辈指点,在simulink论坛也是前辈回答的,非常感谢!:@)
发表于 2010-3-6 21:43 | 显示全部楼层
画正二十面体的程序如下:
  1. t = 0:2*pi/5:(2*pi-2*pi/5);
  2. vert = [cos(t'),sin(t'),zeros(5,1)];
  3. t = t'+pi/5;
  4. a = 2*sin(pi/5);
  5. vert=[vert;cos(t),sin(t),a*sqrt(3)*ones(5,1)/2];
  6. h = sqrt(0.75*a^2-cos(pi/5)^2);
  7. vert = [0 0 -h;vert;0 0 a*sqrt(3)/2+h];
  8. fac = [1 2 3
  9.        1 3 4
  10.        1 4 5
  11.        1 5 6
  12.        1 6 2
  13.        2 3 7
  14.        2 6 11
  15.        2 7 11
  16.        3 7 8
  17.        3 4 8
  18.        4 8 9
  19.        4 5 9
  20.        5 9 10
  21.        5 6 10
  22.        6 10 11
  23.        7 8 12
  24.        8 9 12
  25.        9 10 12
  26.        10 11 12
  27.        7 11 12];
  28. h = patch('faces',fac,'vertices',vert,'FaceColor','r');
  29. view(3);    %设置视角
  30. %set(h,'FaceAlpha',0.5);    %设置正12面体透明度
  31. light('Posi',[100 100 100]);
  32. lightangle(30,30);     %建立光源并设置光源视角
  33. lighting flat;    %设置光照模式
  34. material metal;    %设置面的反射属性
  35. axis equal;    %设置坐标轴显示方式
  36. %xlabel('X'); ylabel('Y'); zlabel('Z');    %为坐标轴加标签
  37. axis off
复制代码
效果如图:

[ 本帖最后由 xiezhh 于 2010-3-6 22:59 编辑 ]
正二十面体.jpg

评分

1

查看全部评分

 楼主| 发表于 2010-3-7 15:37 | 显示全部楼层

回复 5楼 xiezhh 的帖子

谢前辈指点,非常感谢,我会好好看你写的程序的。谢谢!

前辈,我还想再问一个问题。我现在有很多个点坐标了,162个,这些点都均匀分布在单位1的球壳上,这些点连起来就是一个300面体。我只会用plot3画,因为这样划线线太多了,结果整个图形就成了一个黑黑的球面。看不出来了,我想请问前辈,用什么函数可以画出,您例子里面的效果来。而不是线框图。

[ 本帖最后由 ChaChing 于 2010-3-7 19:55 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 18:47 , Processed in 0.088740 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表