请高手指教,我如何实现我的算法 voronoi + B-spline
本帖最后由 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. 画出拟合曲线与未拟合直线所构成的图形 。
请高手指点,如果我叙述不够清楚,请指出,我及时改正。 rand('state',5);
x=rand(10,2);
=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自带的这段代码,里面的=voronoin(x); 是提取voronoi点的坐标和"围圈"关系的,这个可从patch(v(c{i},1),v(c{i},2),i); 这里头的patch函数可以看出来! 2# liushuangq05
感谢liushuangq05
patch语句,是创建补片图形函数, 因为=voronoin(x)生成的随机点数据储存在矩阵v和c中。
如二维
>> rand('state',111)
x = rand(1,10); y =rand(1,10);
= voronoin()
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 =
但是用随机函数产生的晶胞发散,所以我用到了mp tool.
工具中对随机点距离进行了限制,但是函数P的数据无从超找。
在workspace中也没有任何显示。
我应该去研究一下mp tool.
主要我是一个菜鸟,有一些对一些函数还不是很熟悉,希望大家指点。
指出我可能用到的函数,我自己去研究一下。提高我的课题速度。
在这里不胜感激。 "用随机函数产生的晶胞发散"这个我不是很理解.
一般的,只要创建voronoi图的离散数据如果不构成凸边界,那都会有比较明显的发散构造(就是外边界上的多边形(二维情况)向外延伸很长).
你不妨在生成的随机数的数集上再加点工夫,使这些生成的随机数的某个子集满足你的需求,不知道可否? 4# liushuangq05
恩,我读了 司良英 等的《基于Vorono i图的晶体塑性有限元多晶几何建模》
作者利用栅格法生成随机点,保证Voronoi晶包面积复合一定的分布规律。
我对这个分布没有具体要求,只要不出现特别大,或者特别小的晶核即可。
研究一下matlab 关于图形方面的知识。 本帖最后由 haoxiangmiao 于 2011-2-18 13:33 编辑
在这个算法中用到了ifelse语句,
if distance>r
Bspline(p)
else
在这里我不想做任何处理,我怎么表达?(求教)我用continue还是return??
end 6# haoxiangmiao
if-else是条件判断语句,不够成循环,所以你可以不用else段,直接if...end就OK了。continue是循环语句中跳出本层循环,进入外层循环的语句,而return一般用在自定义函数里边,在你这儿都用不上。 7# lengyunfeng
这个问题清楚了,谢谢lengyunfeng。
请问我想编辑工具箱里的函数,或者把工具箱里的函数调出来。我应该用什么语句? 8# haoxiangmiao
你直接用edit 后面跟上你要编辑的函数名就行了,只要你的工具箱文件夹在matlab的搜索路径里就能以matlab自带的文本编缉器打开并进行编缉。不过劝你在没弄清楚这个工具箱底层函数调用与架构的情况下,最好别去修改它,因为工具箱里边的函数彼此之间有相互调用关系,一旦你改了其中一个,可能导致与之相关的一系列函数都无法继续使用。 本帖最后由 scott198510 于 2011-4-15 21:27 编辑
matlab里面voronoi函数生成的韦恩图是在 坐标系里面搞的,得到的图形虽然 效果很好,但是他是划线的方法得到的,图形不能在数据基础上继续演变,我自己研究出来的按照voronoi 算法活动的图像 都是矩阵信息,可以演变 ,不过遗憾就是没有 voronoi 函数得到的图形边界光顺,附图 10# scott198510
我就是想要这些矩阵信息,呵呵
我现在需要求这些“细胞”的质心。
用什么函数呢?
请赐教 本帖最后由 haoxiangmiao 于 2011-8-3 13:49 编辑
我像继续在此提问:谁对Bspline 这个函数比较熟悉。或者有其他的函数?
bspline(t)
bspline(t,window)
pp = bspline(t)
我想实现基本功能。如图所示
我如何实现通过改变参数p.来改变曲线的形状?
希望能得到帮助。在线等待。sp=spap2(knot,k,x,y)?
x=
y=
sp=spap2(1,2,x,y)
hold on
plot(sp,'g*');
我用这个程序试验。没什么反应。迷惑中。 回复 1# haoxiangmiao
我是新手,请问楼主能否把你的代码发给我参考一下!万分感谢!wcjhit@163.com
页:
[1]