如何用matlab画正二十面体
各位前辈好:本人想用matlab画一个正二十面体,但是总是找不到matlab中能够画多面体的函数,不知道编程时该从哪个角度考虑。各位前辈可否帮忙解答一下。谢谢! 运行下面的代码可画正12面体,正20面体与之类似,自己试试吧
phi = (1+sqrt(5))/2;
vert = ;
vert = ;
vert = ;
vert = ;
fac = [3 4 17 10 14
6 8 19 4 17
9 16 6 17 10
5 13 9 10 14
14 3 20 7 5
3 4 19 12 20
8 18 11 12 19
16 2 18 8 6
7 20 12 11 15
2 1 15 11 18
13 5 7 15 1
9 13 1 2 16];
h = patch('faces',fac,'vertices',vert,'FaceColor','r');
view(3); %设置视角
%set(h,'FaceAlpha',0.5); %设置正12面体透明度
light('Posi',);
lightangle(-45,60); %建立光源并设置光源视角
lighting flat; %设置光照模式
material metal; %设置面的反射属性
axis equal; %设置坐标轴显示方式
%xlabel('X'); ylabel('Y'); zlabel('Z'); %为坐标轴加标签
axis off
效果如图:
[ 本帖最后由 xiezhh 于 2010-3-4 22:40 编辑 ] 个人以为画正多面体的重点, 应该是那些顶点的座标如何求得, 怎奈我忘了干净了! 汗颜:@L
本想上网查查, 又有点懒!:loveliness:
回复 沙发 xiezhh 的帖子
非常感谢前辈指点,在simulink论坛也是前辈回答的,非常感谢!:@) 画正二十面体的程序如下:t = 0:2*pi/5:(2*pi-2*pi/5);vert = ;
t = t'+pi/5;
a = 2*sin(pi/5);
vert=;
h = sqrt(0.75*a^2-cos(pi/5)^2);
vert = ;
fac = [1 2 3
1 3 4
1 4 5
1 5 6
1 6 2
2 3 7
2 6 11
2 7 11
3 7 8
3 4 8
4 8 9
4 5 9
5 9 10
5 6 10
6 10 11
7 8 12
8 9 12
9 10 12
10 11 12
7 11 12];
h = patch('faces',fac,'vertices',vert,'FaceColor','r');
view(3); %设置视角
%set(h,'FaceAlpha',0.5); %设置正12面体透明度
light('Posi',);
lightangle(30,30); %建立光源并设置光源视角
lighting flat; %设置光照模式
material metal; %设置面的反射属性
axis equal; %设置坐标轴显示方式
%xlabel('X'); ylabel('Y'); zlabel('Z'); %为坐标轴加标签
axis off效果如图:
[ 本帖最后由 xiezhh 于 2010-3-6 22:59 编辑 ]
回复 5楼 xiezhh 的帖子
谢前辈指点,非常感谢,我会好好看你写的程序的。谢谢!前辈,我还想再问一个问题。我现在有很多个点坐标了,162个,这些点都均匀分布在单位1的球壳上,这些点连起来就是一个300面体。我只会用plot3画,因为这样划线线太多了,结果整个图形就成了一个黑黑的球面。看不出来了,我想请问前辈,用什么函数可以画出,您例子里面的效果来。而不是线框图。
[ 本帖最后由 ChaChing 于 2010-3-7 19:55 编辑 ]
页:
[1]