声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2986|回复: 8

[编程技巧] 求助:画圆面?

[复制链接]
发表于 2009-6-24 21:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
已知:
两列,50行的数组,例如
x     y
0     16000
1      15000
。     。
。     。
49     15000
50      16000

想画一个圆面,其中,在直径上的数据(灰度值)按y列分布。
最后用imagesc做图

请问应该怎么画,谢谢?
clc
clear all
close all
[x,y]=meshgrid(-50:49);
M=zeros(100);
M(:,:)=50000; %背景
R=(0:35) ;  %直径
I=(0:1000:35000); %要填充的灰度值
N=length(R);
for i=1:4
M(sqrt(x.^2+y.^2)==R(i))=I(i);
imagesc(-50:49,-50:49,M),colormap gray;
hold on
end

如果哦我按这个运行,最后得到的不是圆面,而是点分布。
请问该如何修改,才能得到填充的圆面?例如中间灰度值为0,然后不同的直径对应不同的灰度值

[ 本帖最后由 bop 于 2009-6-25 03:17 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-6-24 22:37 | 显示全部楼层

不太清楚LZ的意思!
试试polar是否LZ要的

[ 本帖最后由 ChaChing 于 2009-6-24 22:40 编辑 ]
 楼主| 发表于 2009-6-25 03:24 | 显示全部楼层
原帖由 ChaChing 于 2009-6-24 22:37 发表

不太清楚LZ的意思!
试试polar是否LZ要的


polar好像不是的。

我是想用matlab,画一圆面。恩,例如,定义该圆面中心灰度值为零(黑色),然后其他地方的灰度值值随着半径的变化而变化。

请问,我该怎么修改呢?
谢谢
发表于 2009-6-26 11:45 | 显示全部楼层

回复 板凳 bop 的帖子

可以做,精度不高,修改代码仅供参考,如何改进解析度自己考虑
clc
clear all
close all
[x,y]=meshgrid(-50:49);
M=zeros(100);
M(:,:)=50000; %背景
R=(0:35) ;  %直径
I=(0:1000:35000); %要填充的灰度值
N=length(R);
for i=1:N,
M(abs(sqrt(x.^2+y.^2)-R(i))<10)=I(i);
imagesc(-50:49,-50:49,M),colormap gray;
hold on
end

评分

1

查看全部评分

发表于 2009-6-26 22:12 | 显示全部楼层

回复 楼主 bop 的帖子

使用编辑将讯息合成一帖是个好习惯!
但建议楼主以後视情况使用, 不然2F的回帖变成很唐突!
 楼主| 发表于 2009-6-29 04:45 | 显示全部楼层
原帖由 ChaChing 于 2009-6-26 22:12 发表
使用编辑将讯息合成一帖是个好习惯!
但建议楼主以後视情况使用, 不然2F的回帖变成很唐突!


恩,不好意思。
 楼主| 发表于 2009-6-29 05:16 | 显示全部楼层
原帖由 wwbeyondww 于 2009-6-26 11:45 发表
可以做,精度不高,修改代码仅供参考,如何改进解析度自己考虑
clc
clear all
close all
[x,y]=meshgrid(-50:49);
M=zeros(100);
M(:,:)=50000; %背景
R=(0:35) ;  %直径
I=(0:1000:35000); %要填充的灰度值 ...


谢谢。

后来我又尝试用fill,但是得到的图像上面有一个个圆环,就好象是分界线,请问这个分界线( 轮廓线?)可以去掉吗?
谢谢

clc
clear all, close all
[x,y]=meshgrid(-50:49);
M=zeros(100);
R=(0:35);
I=(0:1000:35000);
N=length(R);
N=length(R);
for i=1:N,
M(abs(sqrt(x.^2+y.^2)-R(i))<10)=I(i);
imagesc(-50:49,-50:49,M),colormap gray,axis('square');
hold on
end
%using fill
figure(2)%就是下面的程序画出的圆出现分界线
for k=N:-1:1
    t=0:pi/100:2*pi;
    Cir=R(k)*exp(1i*t); %确定圆的大小
    fill(real(Cir),imag(Cir),I(k)),colormap gray,axis('square'); %填充该圆面
    hold on
end
   
谢谢

[ 本帖最后由 bop 于 2009-6-29 05:25 编辑 ]
发表于 2009-6-29 07:47 | 显示全部楼层

回复 7楼 bop 的帖子

fill里加参数
fill(real(Cir),imag(Cir),I(k),'edgecolor','none'),colormap gray,axis('square'); %填充该圆面

评分

1

查看全部评分

 楼主| 发表于 2009-6-29 15:17 | 显示全部楼层
原帖由 wwbeyondww 于 2009-6-29 07:47 发表
fill里加参数
fill(real(Cir),imag(Cir),I(k),'edgecolor','none'),colormap gray,axis('square'); %填充该圆面


好的,多谢了!:handshake
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 01:47 , Processed in 0.066972 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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