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

请高手指教,我如何实现我的算法 voronoi + B-spline

[复制链接]
发表于 2011-2-15 15:43:59 | 显示全部楼层 |阅读模式 来自 韩国
本帖最后由 haoxiangmiao 于 2011-2-15 15:57 编辑

我用Matlab 画一个Voronoi图
clear all
clc
mpt_init;
P = mpt_voronoi(rand(1000,2)); %用到mp tool
plot(P)

画voronoi图

问题:
1. 如何获得每个晶核(随机原点)的坐标,存在矩阵A中;
2. 与此晶核对应的直线,直线交点,数据存在矩阵B中;
3. 判断交点与晶核的距离, 距离>r 时,此交点的两条直线做B-spline曲线拟合;
4. 画出拟合曲线与未拟合直线所构成的图形 。


请高手指点,如果我叙述不够清楚,请指出,我及时改正。

本帖子中包含更多资源

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

×
发表于 2011-2-15 16:43:44 | 显示全部楼层 来自 天津
Simdroid开发平台
rand('state',5);
x=rand(10,2);
[v,c]=voronoin(x);
for i = 1:length(c)
if all(c{i}~=1)   % If at least one of the indices is 1,
                  % then it is an open region and we can't
                  % patch that.
patch(v(c{i},1),v(c{i},2),i); % use color i.
end
end
axis equal

楼主可以看看matlab自带的这段代码,里面的[v,c]=voronoin(x); 是提取voronoi点的坐标和"围圈"关系的,这个可从patch(v(c{i},1),v(c{i},2),i); 这里头的patch函数可以看出来!

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-2-16 10:22:17 | 显示全部楼层 来自 韩国
2# liushuangq05
感谢liushuangq05
patch语句,是创建补片图形函数, 因为[v,c]=voronoin(x)  生成的随机点数据储存在矩阵v和c中。

如二维

>> rand('state',111)
x = rand(1,10); y =rand(1,10);
[v,c] = voronoin([x(:) y(:)])
for i = 1:length(c)
if all(c{i}~=1)   % If at least one of the indices is 1,
                  % then it is an open region and we can't
                  % patch that.
patch(v(c{i},1),v(c{i},2),i); % use color i.
end
end
v =
       Inf       Inf
    0.4034    0.3131
    0.3333    0.4366
    0.6079    1.0095
    2.3933    0.6375
    0.5009    0.3122
    0.7548   -0.7226
    0.8368    0.1493
    0.5237    0.3213
    0.6184    0.6946
    0.8112    0.5251
    0.7034    0.3527
    0.6510    0.3111

c =
    [1x5 double]
    [1x4 double]
    [1x6 double]
    [1x5 double]
    [1x4 double]
    [1x3 double]
    [1x4 double]
    [1x3 double]
    [1x4 double]
    [1x4 double]

但是用随机函数产生的晶胞发散,所以我用到了mp tool.
工具中对随机点距离进行了限制,但是函数P的数据无从超找。
在workspace中也没有任何显示。
我应该去研究一下mp tool.
主要我是一个菜鸟,有一些对一些函数还不是很熟悉,希望大家指点。
指出我可能用到的函数,我自己去研究一下。提高我的课题速度。
在这里不胜感激。

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2011-2-16 13:31:20 | 显示全部楼层 来自 天津
"用随机函数产生的晶胞发散"这个我不是很理解.
一般的,只要创建voronoi图的离散数据如果不构成凸边界,那都会有比较明显的发散构造(就是外边界上的多边形(二维情况)向外延伸很长).
你不妨在生成的随机数的数集上再加点工夫,使这些生成的随机数的某个子集满足你的需求,不知道可否?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-2-16 16:47:14 | 显示全部楼层 来自 韩国
4# liushuangq05
恩,我读了 司良英 等的《基于Vorono i图的晶体塑性有限元多晶几何建模》
作者利用栅格法生成随机点,保证Voronoi晶包面积复合一定的分布规律。

我对这个分布没有具体要求,只要不出现特别大,或者特别小的晶核即可。

研究一下matlab 关于图形方面的知识。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-2-18 13:02:38 | 显示全部楼层 来自 韩国
本帖最后由 haoxiangmiao 于 2011-2-18 13:33 编辑

在这个算法中用到了if  else语句,
if distance>r
Bspline(p)
else
在这里我不想做任何处理,我怎么表达?(求教)我用continue  还是return??
end
回复 不支持

使用道具 举报

发表于 2011-2-19 15:44:54 | 显示全部楼层 来自 四川成都
6# haoxiangmiao
if-else是条件判断语句,不够成循环,所以你可以不用else段,直接if...end就OK了。continue是循环语句中跳出本层循环,进入外层循环的语句,而return一般用在自定义函数里边,在你这儿都用不上。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-2-21 09:10:32 | 显示全部楼层 来自 韩国
7# lengyunfeng

这个问题清楚了,谢谢lengyunfeng。

请问我想编辑工具箱里的函数,或者把工具箱里的函数调出来。我应该用什么语句?
回复 不支持

使用道具 举报

发表于 2011-2-21 12:43:21 | 显示全部楼层 来自 四川成都
8# haoxiangmiao
你直接用edit 后面跟上你要编辑的函数名就行了,只要你的工具箱文件夹在matlab的搜索路径里就能以matlab自带的文本编缉器打开并进行编缉。不过劝你在没弄清楚这个工具箱底层函数调用与架构的情况下,最好别去修改它,因为工具箱里边的函数彼此之间有相互调用关系,一旦你改了其中一个,可能导致与之相关的一系列函数都无法继续使用。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-4-15 21:21:21 | 显示全部楼层 来自 江苏南京
本帖最后由 scott198510 于 2011-4-15 21:27 编辑

matlab里面voronoi  函数生成的韦恩图是在 坐标系里面搞的,得到的图形虽然 效果很好,但是他是划线的方法得到的,图形不能在数据基础上继续演变,我自己研究出来的按照voronoi 算法活动的图像 都是矩阵信息,可以演变 ,不过遗憾就是没有 voronoi 函数得到的图形边界光顺,附图

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-25 07:08:12 | 显示全部楼层 来自 韩国
10# scott198510
我就是想要这些矩阵信息,呵呵
我现在需要求这些“细胞”的质心。
用什么函数呢?
请赐教
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-3 12:57:00 | 显示全部楼层 来自 韩国
本帖最后由 haoxiangmiao 于 2011-8-3 13:49 编辑

我像继续在此提问:谁对Bspline 这个函数比较熟悉。或者有其他的函数?
bspline(t)
bspline(t,window)
pp = bspline(t)
我想实现基本功能。如图所示



我如何实现通过改变参数p.来改变曲线的形状?

希望能得到帮助。在线等待。sp=spap2(knot,k,x,y)  ?

  1. x=[0 1 2]
  2. y=[0 1 0]
  3. sp=spap2(1,2,x,y)
  4. hold on
  5. plot(sp,'g*');
复制代码




我用这个程序试验。没什么反应。迷惑中。

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2011-8-26 20:07:00 | 显示全部楼层 来自 哈尔滨工业大学一校区
回复 1# haoxiangmiao
我是新手,请问楼主能否把你的代码发给我参考一下!万分感谢!wcjhit@163.com
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-3 05:30 , Processed in 0.045558 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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