m=1
isfirst=1
for i=1:648 %648和1152是图片的大小
for j=1:1152
if A(i,j)==0
if isfirst==1 %判断是否是第一次读到花瓶的边缘
fyh=i %fyh表示黑色部分的第一行的行数
isfirst=0%第一次读过之后将isfirst置0,这样下次就不会在执行这句了
end
x(m)=i%x,y保存了所有黑色部分的坐标
y(m)=j
m=m+1
end
end
end
lyh=x(70349)%lyh是最后一行的行数,由于第70349个x是最后一个横坐标,所以该值也就是最后一行的值
m=1
for i=1:1152 %这个循环用于找出黑色部分第一行的所有点的坐标,横坐标存到topx纵坐标存到topy
if A(fyh,i)==0
topx(m)=fyh
topy(m)=i
m=m+1
end
end
isfirst=1
m=1
for i=fyh:lyh %从黑色部分的第一行到最后一行循环,找出每一行第一个黑色点的坐标,及左边边缘的坐标存入leftx和lefty中
for j=1:1152
if A(i,j)==0
if isfirst==1
leftx(m)=i
lefty(m)=j
m=m+1
isfirst=0
end
end
end
isfirst=1
end
zhongdian=(topy(1)+topy(240))/2%找出花瓶的对称轴,通过对称找出右边缘的坐标
for i=1:384
rightx(i)=leftx(i)
righty(i)=zhongdian*2-lefty(i)
end
m=1
for i=1:1152 %这是找出花瓶底部的坐标,至此花瓶的边缘坐标全部找齐
if A(lyh,i)==0
bottomx(m)=lyh
bottomy(m)=i
m=m+1
end
end
for i=1:384
rightx(i)=rightx(i)-170%坐标变换,将右边缘的轮廓横放在x轴上
righty(i)=righty(i)-zhongdian
end
for i=1:384
temp(i)=righty(385-i)
end
righty=temp
X=rightx
Y=righty
[X,Y,Z]=cylinder(Y,30)%画图部分,cylinder是用来画旋转体的,括号里的Y表示到旋转轴的距离
mesh(X,Y,Z)
MATLAB代码:
x = []
for i = 100:999
a = floor(i/100) %floor向下取整
c = rem(i,10) %rem取余数
b = (i-a*100-c)/10
if 100*a+10*b+c == a^3+b^3+c^3
x = [x,i]
end
end
x
扩展资料
matlab有自己的命令行窗口,对于简单的命令,可以直接在命令行窗口输入,但随着命令行的增加或者命令本身复杂度的增加,再使用命令行就显得有些不便了,这时就需要脚本文件了。可以说,脚本文件是matlab指令集合的封装。
函数文件以function开始,end结束,这也是区别于脚本文件的地方。在function后面接着定义输出参数,函数名和输入参数,比如:
function [x,y,z] = math_count(a,b,c)
x,y,z是输出参数,以方框括起来,math_count是函数名,a,b,c是输入参数,以圆括号括起来。也可以没有参数,比如:
function printresults(x,y)
printresults是函数名,x和y是输入参数,没有输出参数。
matlab共有6中基本数据类型,分别是数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组。
>>t=0:0.001:5*pi>>r=2*sin(2*t).^2
>>plot(r.*cos(t),r.*sin(t))
你看看图吧,比较漂亮,那个三角函数里面的取值只影响花瓣的个数 ,从三角函数的周期性中可以看出的!你理解一下吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)