Greaf 发表于 2009-8-17 10:12

请问matlab如何做出下列图形

11222333
11122333
14442555
44445555
44445555

例如上面的数组,请问如何画出不同数字间的边界线(所得图形只需要边界线,不需数字)?
曾经使用contour画出等高线图,但结果并非所需图案。
谢谢!

[ 本帖最后由 Greaf 于 2009-8-17 10:28 编辑 ]

花如月 发表于 2009-8-20 13:04

手动画最方便,为什么要用matlab做呢?有何实际意义?

Greaf 发表于 2009-8-22 15:16

手动画不方便的。。。因为用到的至少是200*200以上大小的矩阵。
因为之前是用matlab做晶粒长大方面的模拟,需要画出的那些边界线就是模拟意义上的晶界,所以想看看matlab是否能实现这种结果。

ChaChing 发表于 2009-8-22 22:30

回复 楼主 Greaf 的帖子

矩阵怎绘图?

Greaf 发表于 2009-8-23 14:54

er是想说明我目前做的模拟是在200*200大小的数组中,由rand生成随机数后按照一定的规则进行运算,所以所得结果还是比较复杂,不能用手画出来的,附件所附图形只是示意简图。
matlab能否做出上面所说的分界线呢?
之前我是用contour作等高线,但数组一复杂后,图形就会出现一些不应该出现的空白区,目前还是无法解决。。。不过看到文献说OpenGL能实现这要求,但那个我还没用过。。。

sogooda 发表于 2009-8-23 21:28

回复 5楼 Greaf 的帖子

OpenGL只是一种显示支持的平台,具体的算法实现还得自己想。我觉得可以自己想想怎么用matlab实现——不要太寄希望于matlab一个命令就搞定,可能会比较复杂。

花如月 发表于 2009-8-24 17:06

提供给你一个思路,image函数可以完成要求,不过需要做改动,然后自己写个描边的函数。
这个是用很笨的方法绘制的边,不过也说明可以用这种方式解决的
A=;
imagesc(A);hold on;
X1=[.5 1.5 1.5 4.5 4.5 5.5 5.5 8.5];Y1=;
X2=;Y2=;
X3=;Y3=;
line(X1,Y1,'Color','k','LineWidth',5);
line(X2,Y2,'Color','k','LineWidth',5);
line(X3,Y3,'Color','k','LineWidth',5);


一定可以做出来,你可以传一组200*200实验数据上来,我试试看

[ 本帖最后由 ChaChing 于 2009-8-26 19:39 编辑 ]

Greaf 发表于 2009-8-26 15:51

啊,非常感谢,我先自己尝试一下吧
再次表示感谢!

Greaf 发表于 2009-8-28 21:14

今天突然得到个灵感,不知这个能不能理解为识别数字的问题
逐行扫描,当扫描到数字与上一个数字不同的时候插入“|”或“—”
这样会不会可行嘞?

Greaf 发表于 2009-8-30 11:25

%v为矩阵
imagesc(v);
hold on;
%l为line,r为row
%hx,hy为矩阵行、列数
for l=1:hx
    for r=1:hy
      x1=[];x2=[];y1=[];y2=[];
      if r~=hy
            if v(l,r)~=v(l,r+1)
                x1=;
                y1=;
                line(y1,x1,'Color','k','LineWidth',3)
            end
      end
      if l~=hx
            if v(l,r)~=v(l+1,r)
                x2=;
                y2=;
                line(y2,x2,'Color','k','LineWidth',3)
            end
      end
    end
end

再次感谢花如月兄提示,谢谢

另,请教一下,image或imagesc可否设置各区域颜色?我找到的书籍及PDF对这两个函数都几乎没有提及

[ 本帖最后由 ChaChing 于 2009-8-30 12:26 编辑 ]
页: [1]
查看完整版本: 请问matlab如何做出下列图形