hanwangabc 发表于 2008-6-11 16:01

怎样根据选定的点画成闭合曲线?

怎样根据选定的点画成没有闭合的曲线和闭合曲线?

ch_j1985 发表于 2008-6-11 16:06

原帖由 hanwangabc 于 2008-6-11 16:01 发表 http://www.chinavib.com/forum/images/common/back.gif
怎样根据选定的点画成没有闭合的曲线和闭合曲线?
没有看明白LZ的问题的意思

wwbeyondww 发表于 2008-6-11 17:21

是不是想这样?
比如:
t=-10:0.1:10;
f=sin(t);
plot(,);

bainhome 发表于 2008-6-11 19:00

没那么简单。
http://www.simwe.com/forum/thread-539094-1-1.html
PS:今天看到其他版贴了Simwe的链接被某奇人鉴定为“100%做广告”,不可思议+目瞪口呆之余,我也先申明一下:这里贴链接的原因是里面言论太多,代码太多,懒得转。另外,simwe的MATLAB版也不需要在任何论坛做广告。

w89986581 发表于 2008-6-11 23:15

有时候确实很难划定界限......

hanwangabc 发表于 2008-6-12 14:52

就是用户在图像上选几个点,然后把这几个点连成闭合曲线。
我试验一下,用matlab帮助里的代码,使用ginput(),可以返回坐标值,然后用样条函数spline,把点连成线,但是要想闭合还得在第一个点上选一下。,代码如下:
hold on
xy = [];
n = 0;
%左键选点
%右键选最后一个点
bt = 1;
while bt == 1
    = ginput(1);
    plot(xi,yi,'r.')
    n = n+1;
    xy(:,n) = ;
end
t = 1:n;
ts = 1: 0.1: n;
xys = spline(t,xy,ts);
plot(xys(1,:),xys(2,:),'b-');
hold off
坐标值就存在xy()里面,怎样把它写进文本?

ch_j1985 发表于 2008-6-12 15:05

原帖由 hanwangabc 于 2008-6-12 14:52 发表 http://www.chinavib.com/forum/images/common/back.gif
就是用户在图像上选几个点,然后把这几个点连成闭合曲线。
我试验一下,用matlab帮助里的代码,使用ginput(),可以返回坐标值,然后用样条函数spline,把点连成线,但是要想闭合还得在第一个点上选一下。,代码如下: ...

坐标值写进文本可以参考此帖:
http://www.chinavib.com/forum/viewthread.php?tid=45622&extra=page%3D1%26amp%3Bfilter%3Ddigest

LZ的程序要实现最后一个点和第一个点重合好像有点困难,是不是可以修改一下?

[ 本帖最后由 ch_j1985 于 2008-6-12 15:08 编辑 ]

kkkttt 发表于 2008-6-12 15:45

是不是这个意思?

hold on
xy = [];
n = 0;
%左键选点
%右键选最后一个点
bt = 1;
while bt == 1
    = ginput(1);
    plot(xi,yi,'r.')
    n = n+1;
    xy(:,n) = ;
end
xy(:,n+1)=;
t = 1:n+1;
ts = 1: 0.1: n+1;
xys = spline(t,xy,ts);
plot(xys(1,:),xys(2,:),'b-');
hold off

hanwangabc 发表于 2008-6-12 15:47

实际结果我在matlab中试验是:
   141   126   127   149   
      106   113   137   129
我用save xy.txt xy -ascii;保存后,打开xy.txt是这样的,
1.4100000e+0021.2600000e+0021.2700000e+0021.4900000e+002

1.0600000e+0021.1300000e+0021.3700000e+0021.2900000e+002
有没有什么办法保存成
   141   126   127   149   
      106   113   137   129这样?

hanwangabc 发表于 2008-6-12 15:55

回复 8楼 的帖子

太谢谢你了,刚才发错了,原来是循环。

[ 本帖最后由 hanwangabc 于 2008-6-12 16:00 编辑 ]

ch_j1985 发表于 2008-6-12 15:56

原帖由 hanwangabc 于 2008-6-12 15:47 发表 http://www.chinavib.com/forum/images/common/back.gif
实际结果我在matlab中试验是:
   141   126   127   149   
      106   113   137   129
我用save xy.txt xy -ascii;保存后,打开xy.txt是这样的,
1.4100000e+0021.2600000e+0021.2700000e+0021.490 ...
是不是这个:

hold on
clc
clear
xy = [];
n = 0;
%左键选点
%右键选最后一个点
bt = 1;
while bt == 1
    = ginput(1);
    plot(xi,yi,'r.')
    n = n+1;
    xy(:,n) = ;
end
xy(:,n+1) = xy(:,1);
t = 1:n+1;
ts = 1: 0.1: n+1;
xys = spline(t,xy,ts);
plot(xys(1,:),xys(2,:),'b-');
hold off
fid=fopen('data.txt','w');
for k1=1:2
    for k2=1:n+1
    fprintf(fid,'%f',xy(k1,k2));
    end
    fprintf(fid,'\n');
end
fclose(fid);

ch_j1985 发表于 2008-6-12 16:03

原帖由 hanwangabc 于 2008-6-12 15:55 发表 http://www.chinavib.com/forum/images/common/back.gif
太谢谢你了,我看不懂这里:
xy(:,n+1)=;
t = 1:n+1;
ts = 1: 0.1: n+1;
代码的意思是将第一个点的坐标值赋给最后一个点,这样右击的那个点算是倒数第二个点了,而不是最后一个了
xy(:,n+1)=;
个人觉得应该改为xy(:,n+1)=;
不过也不影响画图

hanwangabc 发表于 2008-6-12 16:10

回复 11楼 的帖子

data.txt数据有点乱,没有自动换行,就像原本是
   141   126   127   149   
      106   113   137   129
里面就是
    141   126   127   149   106   
          113   137   129

ch_j1985 发表于 2008-6-12 16:29

原帖由 hanwangabc 于 2008-6-12 16:10 发表 http://www.chinavib.com/forum/images/common/back.gif
data.txt数据有点乱,没有自动换行,就像原本是
   141   126   127   149   
      106   113   137   129
里面就是
    141   126   127   149   106   
          113   137   129
下图中两个黑色的点就表示换行
保存为其它格式的文件试试看

hanwangabc 发表于 2008-6-12 17:37

回复 14楼 的帖子

我用这个解决了
dlmwrite('myfile1.txt', xy, 'precision', '%.0f', 'newline', 'pc');结果如下:
146,148,141,125,123,128,135,146
155,170,174,167,158,152,150,155

论坛怎么发图片啊?我本来想把结果切图贴上的。
页: [1] 2
查看完整版本: 怎样根据选定的点画成闭合曲线?