- 积分
- 27
- 注册时间
- 2008-3-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2012-2-29 22:30:09
|
显示全部楼层
来自 英国
本帖最后由 nwcwww 于 2012-2-29 22:34 编辑
scott198510 发表于 2012-2-28 23:20
兄台 既然这样说了,可否施展一下高招?这个三维韦恩图的生成,
在matlab里面直接实现,按照aba论坛里面 ...
voronoi图我平时没咋用过,光是以前出于兴趣大概看了看。mathworks上有demo的:http://www.mathworks.co.uk/produ ... tlab/qhulldemo.html。不过那个例子里只在3D空间里画了一个最简单的区域,没有涉及到那些含有Inf坐标从而体积无限的多面体。如果是为了有限元的前处理而生成三维voronoi的话这样确实没法用,因为我们的目标是对有限实体进行剖分。
可能的解决方法也不唯一,我记得mathworks FEX上有人分享过程序,他是先找那些Inf点,然后计算出合适的替代点并排序。除此之外也可以在实体外面添加限制点(比如一个多面体的端点和面心),或者是添加镜像点。
我觉得类似于三楼的效果可以这么做:
- %Outer boundary
- %Draw the cube
- cb = zeros(8,3);
- cb([5:8,11,12,15,16,18,20,22,24]) = 2;
- cb(9,:) = ones(1,3);
- cb = cb-ones(9,3);
- d = [1 2 4 3 1 5 6 8 7 5 6 2 4 8 7 3];
- plot3(cb(d,1),cb(d,2),cb(d,3),'k-'); axis equal
- %Seeding
- s = 1e3;
- x = 2*rand(s,1)-1;
- y = 2*rand(s,1)-1;
- z = 2*rand(s,1)-1;
- %Add mirror pts
- xx = [x;-2-x;2-x; x; x; x; x];
- yy = [y; y; y;-2-y;2-y; y; y];
- zz = [z; z; z; z; z;-2-z;2-z];
- %Voronoi
- [V,C] = voronoin([xx,yy,zz]);
- %Visualisation
- for k = 1:length(C)
- if all(C{k} ~= 1) %not infinity
- Verts = V(C{k},:);
- CoordAbs = abs(Verts(:));
- if all(CoordAbs <= 1+eps(single(1)))%within boundary
- VertHull = convhulln(Verts);
- patch('Vertices',Verts,'Faces',VertHull,'FaceColor',rand(3,1),'EdgeColor','None');
- end
- end
- end
- view(3)
复制代码
还有就是韦恩图一般是指Venn而不是voronoi吧。Venn和我还是一个学院的。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
2
查看全部评分
-
|