logo资料库

计算机图形学实验报告及代码.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
一、 实验内容 利用 Bresenham 画线算法和中点画圆算法画一个小房子。小房子包括直线和 圆。 二、 实验设计 1、画线函数设计 采用 Bresenham 画线算法,输入参数为起点坐标和终点坐标。注意,此算法 斜率 k 满足 0<=k<=1,且 x1=0&&k<=1) for x=x1:x2 tem=[x,y]; line=[line;tem];% 动态矩阵追加方式之一,每次追加一行 if (p>=0) y=y+1; p=2*(dy-dx)+p; else end p=p+2*dy; end end end 2、画圆算法 M 文件如下 function circle = MidpointCircle(m,n,r ) x = m; y = n+r; d = 1.25 - r;
%setpixel(x,y,1); %img=zeros(1000); %img(x,y)=1; circle=[]; tem=[x,y]; circle=[circle;tem]; while(x +n-m-y<0) if( d < 0) d=d+ 2 * x +3-2*m; x=x+1; else end d = d + 2 * ( x - y ) +5+2*(n-m); x=x+1; y=y-1; %setpixel(x,y,1); %img(x,y)=1; tem=[x,y]; circle=[circle;tem]; %img(2*m-x,y)=1;%x=m tem=[2*m-x,y]; circle=[circle;tem]; %img(m+n-y,m+n-x)=1;%y=-x+m+n tem=[m+n-y,m+n-x]; circle=[circle;tem]; %img(m-n+y,m+n-x)=1;%x=m tem=[m-n+y,m+n-x]; circle=[circle;tem]; %img(2*m-x,2*n-y)=1;%关于(m,n)对称 tem=[2*m-x,2*n-y]; circle=[circle;tem]; %img(x,2*n-y)=1;%x=m tem=[x,2*n-y]; circle=[circle;tem]; %img(m-n+y,n-m+x)=1;%y=-x+m+n tem=[m-n+y,n-m+x]; circle=[circle;tem]; %img(m+n-y,n-m+x)=1;%x=m tem=[m+n-y,n-m+x]; circle=[circle;tem]; end end
3、画半圆的 M 文件如下 function [ partCircle ] = partCircle( m,n,r ) x = m; y = n+r; d = 1.25 - r; %setpixel(x,y,1); %img=zeros(1000); %img(x,y)=1; partCircle=[]; tem=[x,y]; partCircle=[partCircle;tem]; while(x +n-m-y<0) if( d < 0) d=d+ 2 * x +3-2*m; x=x+1; else end d = d + 2 * ( x - y ) +5+2*(n-m); x=x+1; y=y-1; %setpixel(x,y,1); %img(x,y)=1; tem=[x,y]; %partCircle=[partCircle;tem]; tem=[2*m-x,y]; partCircle=[partCircle;tem]; %img(m+n-y,m+n-x)=1;%y=-x+m+n tem=[m+n-y,m+n-x]; partCircle=[partCircle;tem]; %img(m-n+y,m+n-x)=1;%x=m tem=[m-n+y,m+n-x]; %partCircle=[partCircle;tem]; %img(2*m-x,2*n-y)=1;%关于(m,n)对称 tem=[2*m-x,2*n-y]; partCircle=[partCircle;tem]; %img(x,2*n-y)=1;%x=m tem=[x,2*n-y]; %partCircle=[partCircle;tem]; %img(m-n+y,n-m+x)=1;%y=-x+m+n tem=[m-n+y,n-m+x]; %partCircle=[partCircle;tem]; %img(m+n-y,n-m+x)=1;%x=m tem=[m+n-y,n-m+x]; partCircle=[partCircle;tem];
end 4、画房子的 M 文件如下 img=ones(1000); % line1=BresenhamLine1(100,500,500,100); % for i=1:length(line1) % % end line2=BresenhamLine(100,500,500,900); for i=1:length(line2) img(line1(i,1),line1(i,2))=0; img(line2(i,1),line2(i,2))=0; img(line2(i,1),1000-line2(i,2))=0; end circle1=MidpointCircle(300,500,70); for i=1:length(circle1) img(circle1(i,1),circle1(i,2))=0; end partcircle=partCircle(650,350,50); for i=1:length(partcircle) img(partcircle(i,1),partcircle(i,2))=0; end for i=110:890 img(490,i)=0; end for i=490:900 img(i,110)=0; end for i=490:900 img(i,890)=0; end for i=110:890 img(900,i)=0; end for i=700:900 img(i,700)=0; end for i=700:900 img(i,800)=0; end for i=700:800 img(700,i)=0; end
for i=300:400 img(725,i)=0; end for i=650:725 img(i,300)=0; end for i=650:725 img(i,400)=0; end figure;imshow(img) 四、实验结果
分享到:
收藏