找回密码
 注册
Simdroid-非首页
查看: 989|回复: 15

请教高手:如何用matlab生成3D的voronoi图?

[复制链接]
发表于 2011-5-16 21:08:17 | 显示全部楼层 |阅读模式 来自 广东广州
最近在做多晶建模分析,需要建立3D的voronoi图。请教高手:如何用matlab生成3D的voronoi图?先谢谢了!
发表于 2012-2-29 22:30:09 | 显示全部楼层 来自 英国
Simdroid开发平台
本帖最后由 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点,然后计算出合适的替代点并排序。除此之外也可以在实体外面添加限制点(比如一个多面体的端点和面心),或者是添加镜像点。


我觉得类似于三楼的效果可以这么做:
  1. %Outer boundary
  2. %Draw the cube
  3. cb = zeros(8,3);
  4. cb([5:8,11,12,15,16,18,20,22,24]) = 2;
  5. cb(9,:) = ones(1,3);
  6. cb = cb-ones(9,3);
  7. d = [1 2 4 3 1 5 6 8 7 5 6 2 4 8 7 3];
  8. plot3(cb(d,1),cb(d,2),cb(d,3),'k-'); axis equal


  9. %Seeding
  10. s = 1e3;
  11. x = 2*rand(s,1)-1;
  12. y = 2*rand(s,1)-1;
  13. z = 2*rand(s,1)-1;

  14. %Add mirror pts
  15. xx = [x;-2-x;2-x;   x;  x;   x;  x];
  16. yy = [y;   y;  y;-2-y;2-y;   y;  y];
  17. zz = [z;   z;  z;   z;  z;-2-z;2-z];

  18. %Voronoi
  19. [V,C] = voronoin([xx,yy,zz]);

  20. %Visualisation
  21. for k = 1:length(C)
  22.     if all(C{k} ~= 1) %not infinity
  23.         Verts = V(C{k},:);
  24.         CoordAbs = abs(Verts(:));
  25.         if all(CoordAbs <= 1+eps(single(1)))%within boundary
  26.             VertHull = convhulln(Verts);
  27.             patch('Vertices',Verts,'Faces',VertHull,'FaceColor',rand(3,1),'EdgeColor','None');
  28.         end
  29.     end
  30. end
  31. view(3)
复制代码





还有就是韦恩图一般是指Venn而不是voronoi吧。Venn和我还是一个学院的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

点评

voronoi实际上只提供了数据,关键是patch向确定表面上的附着,很精彩!因为是第一次看到这样完整成熟利用现成命令的结合,自然值得再次鼓掌!  发表于 2012-3-1 17:33

评分

2

查看全部评分

回复 1 不支持 0

使用道具 举报

发表于 2011-5-17 01:10:59 | 显示全部楼层 来自 英国
help voronoin

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-5-17 14:24:16 | 显示全部楼层 来自 江苏南京
本帖最后由 scott198510 于 2011-5-17 14:25 编辑

2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上,自己编程序。。

这是我编程序做的三维韦恩图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

点评

韦恩图是集合中的内容,voronoi又叫泰森多边形或者狄利克雷图(Dirichlet),8楼介绍有误,你说的是对的。  发表于 2013-5-16 21:03

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-5-17 19:17:30 | 显示全部楼层 来自 英国
2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上,自己编程序。。

这是我编程序做的三维韦恩图
scott198510 发表于 2011-5-17 14:24


help 里面讲了怎么生成三维图形的。
从voronoin得到[V, C]后,
先convhulln然后patch下就可以了,
很简单。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-6-19 11:04:01 | 显示全部楼层 来自 广东肇庆
好的,非常感谢楼上的兄台!
回复 不支持

使用道具 举报

发表于 2012-2-28 23:20:59 | 显示全部楼层 来自 江苏南京
本帖最后由 scott198510 于 2012-2-29 15:49 编辑
nwcwww 发表于 2011-5-17 19:17
help 里面讲了怎么生成三维图形的。
从voronoin得到[V, C]后,
先convhulln然后patch下就可以了,


兄台 既然这样说了,可否施展一下高招?这个三维韦恩图的生成,
在matlab里面直接实现,按照aba论坛里面的说法,基本上是做不到,兄台你若支招,我相信斑竹会给你加技术分
回复 不支持

使用道具 举报

发表于 2012-2-29 23:31:11 | 显示全部楼层 来自 江苏南京
本帖最后由 scott198510 于 2012-2-29 23:36 编辑
nwcwww 发表于 2012-2-29 22:30
voronoi图我平时没咋用过,光是以前出于兴趣大概看了看。mathworks上有demo的:http://www.mathworks.co.u ...


voronoi图一般在音译的时候就是叫做韦恩图,当然 严格来说的话,还是直接用voronoi图的好,容易误解。
兄台果然出手不凡,我相信斑竹会有所表示,这个确实是打开眼界。
回复 不支持

使用道具 举报

发表于 2015-3-20 15:52:10 | 显示全部楼层 来自 山东淄博
高手的帖子啊  ,顶一个
回复 不支持

使用道具 举报

发表于 2015-4-24 10:53:58 | 显示全部楼层 来自 黑龙江哈尔滨
scott198510 发表于 2011-5-17 14:24
2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上, ...

您好,最近对这个很感兴趣,不知道您可以分享一下你的程序吗?照顾一下我们这些后进
回复 不支持

使用道具 举报

发表于 2016-7-27 18:47:55 | 显示全部楼层 来自 辽宁沈阳
scott198510 发表于 2011-5-17 14:24
2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上, ...

前辈能不能指导下如何编程实现三维voronoi,晚辈感激不尽
回复 不支持

使用道具 举报

发表于 2016-8-20 16:50:51 | 显示全部楼层 来自 山西太原
scott198510 发表于 2011-5-17 14:24
2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上, ...

您好,我通过mpt-voronoi 在matlab中建立了三维图,怎么实现在abaqus中建模呢?求指点!小硕一枚!
回复 不支持

使用道具 举报

发表于 2017-6-25 16:40:14 | 显示全部楼层 来自 湖南长沙
scott198510 发表于 2011-5-17 14:24
2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上, ...

可以分享一下这个程序吗,很想学习一下,谢谢~ 方便加qq吗2210225308
回复 不支持

使用道具 举报

发表于 2017-6-25 16:41:02 | 显示全部楼层 来自 湖南长沙
scott198510 发表于 2011-5-17 14:24
2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上, ...

可以分享一下这个程序吗,很想学习一下,谢谢~ 方便加qq吗           2210225308
回复 不支持

使用道具 举报

发表于 2017-6-25 16:42:58 | 显示全部楼层 来自 湖南长沙
scott198510 发表于 2011-5-17 14:24
2# nwcwww

直接 用 voronoin这个函数生成不了三维韦恩图的,只能做二维,三维必须在韦恩图的算法基础上, ...

方便加个qq吗 方便分享一下你生成3维voronoi图的程序吗  万分感谢~
回复 不支持

使用道具 举报

发表于 2018-1-18 13:11:10 | 显示全部楼层 来自 河南
有没有二维的
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 21:52 , Processed in 0.065407 second(s), 22 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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