作业帮 > 综合 > 作业

matlab中如何求出以一点为圆心画圆得到图像内的所有点的坐标

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/03/28 16:46:44
matlab中如何求出以一点为圆心画圆得到图像内的所有点的坐标
matlab中如何求出以一点为圆心画圆得到图像内的所有点的坐标
把这些点的所有坐标存入数组xy,假设圆心为(x0,y0)半径r,节点数为n,xy的第一列为x坐标,第二列为y坐标.代码如下
x0=1;y0=1;r=2;n=100;
xy=zeros(100,2);
h=2*pi/(n-1);
for i=1:n
xy(i,1)=x0+r*cos((i-1)*h);
xy(i,2)=y0+r*sin((i-1)*h);
end
plot(xy(:,1),xy(:,2))
axis equal
再问: h=2*pi/(n-1);这句是什么意思呢? 还有,现在已知的就只有圆心坐标和半径,并不知道里面有多少节点。
再答: 对于前者,h是角度坐标的步长。 对于后者,我不清楚你所遇到的实际问题是什么样的。能不能假设一个比较大的节点数,因为从理论上一个圆上的节点数是无穷大的,我们进行数值计算只要节点数足够多就可以了。
再问: 是这样的,我在做的实习题目是基于matlab的图像变形,我所说的圆形图像是在原图像上取一点P,以他为圆心,R为半径的圆形图像,对于数字图像,坐标都是整数,所以园内的节点肯定是有限的。
再答: 哦,这样的话,点的数目很明显应该由图片的像素点的大小来确定,像素点小则节点数多,图片也越清晰。然而这些都是无关紧要的,你只要将最后得到的坐标值人为取整,然后再删掉重复的节点就可以了。取整的命令如下,其中xy就是前面的数组。 xynew=round(xy)
再问: 可是我还是事先不知道节点数啊,如果半径很大,我要一个一个数节点数么?
再答: 恩你说的很对,可以一开始设置一个与半径有关的的量作为节点数如 n=10000*r,至于为什么取为线性关系,原因很简单——圆周公式,周长与半径成正比。前面的系数越大就越不会遗漏像素点,但是最后你需要删除的重复节点也多。
再问: 恩,谢谢你!我知道了,咱俩好像理解岔了,我试了一下你写的代码,这个方法只能得出这个圆形的圆周那条线上的点的坐标,我需要的是这个圆形区域内的所有点的坐标。
再答: 哦,那这样的话其实更简单。直接用下面的代码,其中 m,n为图片的长宽方向的像素点数目,x,y为圆心坐标,r为半径 m=300;n=300;x=50;y=50;r=10 xy=[x y]; for i=1:m for j=1:n if (i-x)^2+(j-y)^2